将节点添加到列表。目前我无法添加第二个节点。

发布于 2024-11-19 12:34:00 字数 549 浏览 3 评论 0原文

public void addNode(Car newCarEntry){
    ListNode currentNode;
    ListNode newNode = new ListNode(newCarEntry);

    if (head == null || newCarEntry.isNewerThan(head.carItem)){
        newNode.next = head;
        head = newNode;
    }else{
        currentNode = head.next;
        while(currentNode != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
            currentNode = currentNode.next;
        }
        currentNode.next = newNode.next;
        currentNode = newNode;
    }
    numberOfNodes++;
}
public void addNode(Car newCarEntry){
    ListNode currentNode;
    ListNode newNode = new ListNode(newCarEntry);

    if (head == null || newCarEntry.isNewerThan(head.carItem)){
        newNode.next = head;
        head = newNode;
    }else{
        currentNode = head.next;
        while(currentNode != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
            currentNode = currentNode.next;
        }
        currentNode.next = newNode.next;
        currentNode = newNode;
    }
    numberOfNodes++;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

£烟消云散 2024-11-26 12:34:00

这看起来很像家庭作业,所以我不会在此处放置任何代码,但在 else 语句中,您将找到新节点的插入点,并将新节点的 next 设置为指向该节点的其余部分列表,但实际上您并没有在任何时候将新节点放入列表中。

This looks a lot like homework, so I'm not going to be putting any code in here, but in your else statement you are finding the insertion point for the new node, and setting the new node's next to point to the remainder of the list, but you are not actually putting your new node in the list at any point.

清秋悲枫 2024-11-26 12:34:00

假设您有一个单节点列表 [HEAD]->null。现在将执行以下几行:

currentNode = head.next; // => null
while(currentNode.next != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
    ...
}

因此,当您尝试添加第二个节点时,它将给您一个空指针异常(访问currentNode.next)。

编辑后:现在不会再出现空指针异常了。相反,会发生以下情况:

currentNode = head.next;              // => null
while(currentNode != null && ...) {   // => not entering loop
    ...
}
newNode.next = currentNode;           // => i.e. null
newNode = currentNode;                // => i.e. null

您只更改了局部变量 newNode,但根本没有更改列表或头。

Assume you have a one-node list [HEAD]->null. Now the following lines will be executed:

currentNode = head.next; // => null
while(currentNode.next != null && !newCarEntry.isNewerThan(currentNode.carItem) ){
    ...
}

Thus it will give you a null pointer exception (accessing currentNode.next) when you try to add the second node.

After the Edit: Now the null pointer exception will not come up any more. Instead the following happens:

currentNode = head.next;              // => null
while(currentNode != null && ...) {   // => not entering loop
    ...
}
newNode.next = currentNode;           // => i.e. null
newNode = currentNode;                // => i.e. null

You are only changing the local variable newNode but not the list or the head at all.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文