当前位置: 首页 > 知识库问答 >
问题:

末端双LL插入卡在回路上

祁烈
2023-03-14

我似乎不明白为什么在双链接列表的末尾插入节点会陷入循环。它要么卡在循环中,要么是空指针。另外,我想知道在处理链表或任何数据结构时,公共节点是更好还是公共无效。

public Node insertEnd(int data) {
    Node newNode = new Node(data);
    newNode.next = null;
    if (head == null) {
        head = newNode;
        return newNode;
    }

    Node last = head;
    while(last!=null) {
        last = last.next;
        last.next = newNode;
    }
    newNode.previous = last;
    return newNode;
}

共有3个答案

顾炎彬
2023-03-14

至于问题的第二部分,它取决于此API的客户端/调用者期望输出的方式。

您编写这个应用编程接口是为了在您正在编写的另一个程序中使用吗?在这种情况下,考虑一下将新创建的节点作为这个应用编程接口的返回值是否有用,或者将其保留为无效是否可以接受。

作为参考,API的Java实现将ull作为返回类型。(https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html#addLast(E))

佘飞鸣
2023-03-14

在您的循环中:

while(last!=null) {
    last = last.next;
    last.next = newNode;
}

第二行设置最后一行。next新节点所以在下一次迭代中,last将被设置为新节点,谁的下一个字段为空。您只想将设置为最后一个。下一个新节点一次最后一次。next==null(当您到达列表末尾时):

while(last.next != null) {
   last = last.next;
}
last.next = newNode;
顾文昌
2023-03-14

这是因为这部分逻辑

    Node last = head;
    while(last!=null) {
        last = last.next;
        last.next = newNode; //// This shouldn't happen.
    }

一旦创建了链表,您就可以尝试转到最后一个元素。但是,在遍历过程中,您还更改了节点指向的下一个指针。

尝试将您的逻辑更改为:

public Node insertEnd(int data) {
    Node newNode = new Node(data);
    newNode.next = null;
    if (head == null) {
        head = newNode;
        return newNode;
    }

    Node last = head;
    while(last.next != null) {
        last = last.next;
    }
    last.next = newNode;
    newNode.previous = last;
    return newNode;
}
 类似资料:
  • 我是新来的java和我有麻烦与下面的代码。我试图将一个双变量转换为字符串变量,在JOptionPane.showMessagedialog中使用它,但它给我一个错误,如下所示。 错误 价格计算器第五章。java:28:错误:找不到showMessageDialog(字符串)PriceComputed=JOptionPane的合适方法。showMessageDialog(“商品价格计算为“零售价格2

  • 我第一次使用链表,必须创建一个可以在双链表末尾插入节点的函数。到目前为止我 Node类按顺序接受要存储的值、要指向的下一个指针的值和上一个指针的值。每当我试图在这里插入节点时,我都会得到一个错误,说有一个未处理的异常,并且在写入位置0x00000008时有访问冲突。 我不完全确定这里出了什么问题,但我认为这与根据错误消息取消引用空指针有关。我真的很感激有人帮忙解决这个问题。

  • 问题内容: 例如,运行查询并查看输出后, 我的输出如下 我将如何导出这些数据,使其看起来如下所示? 还是有一种方法可以在SQL中执行此操作以修改记录以包含引号? 因为在导出时,无论如何都会包含逗号,对吗? 问题答案: 如果您感兴趣的列不超过128个字符,则可以使用QUOTENAME函数。小心一点,因为任何超过128个字符的字符都会返回。

  • 我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。

  • 我有一个带有JPA的JavaRESTAPI。每当我创建一个实体时,我还希望创建另一个具有forgein键的实体。或者有人可以给我其他建议,我会非常感激,并从中学习=)当我成功创建一家公司时,它也会在数据库中创建一个文件实体,因此工作正常。但是,每当我在JPA存储库中执行findAll方法时,它都会给我一个我创建的公司的循环。这样地: 如果你需要更多的信息,请告诉我! 公司班 File.class

  • 拖动列表时,新的列表cell会从屏幕左边插入列表。 [Code4App.com]