gpt4 book ai didi

java - java在链表末尾插入节点时出错

转载 作者:行者123 更新时间:2023-12-01 09:35:52 26 4
gpt4 key购买 nike

我编写此代码是为了在linkedlist的末尾插入一个节点,但是当我打印列表时我只得到第一个元素:

public class LinkedList {

public class Link{

private int data;
private Link next;

public Link(int data,Link next){
this.data = data;
this.next = next;
}

public void printLink(){

System.out.print(data);
}

}

private Link head;

public LinkedList(){
head = null;
}

public void insertNode_end(int data1){

Link node = new Link(data1,null);

if(head == null){

node.next = head;
head = node;
}

else{
Link ptr = head;
while(ptr != null){
ptr = ptr.next;
}

node.next = null;
ptr = node;

}
}

public void printList(){
Link curr_node = head;
while(curr_node != null){
curr_node.printLink();
curr_node = curr_node.next;
}
}

public static void main(String args[]){

LinkedList obj = new LinkedList();

obj.insertNode_end(1);
obj.insertNode_end(2);
obj.insertNode_end(3);
obj.insertNode_end(4);
obj.insertNode_end(5);

obj.printList();
}

}

我只看到 1 被打印。我还尝试执行 ptr.next = node 但随后它抛出 空指针异常

我在这里犯了什么错误?

最佳答案

让我们仔细看看headnull时的部分。

Link ptr = head;
while(ptr != null){
ptr = ptr.next;
}

当此循环终止时,ptr 将为 null。可能不是您想要的(我假设您希望它成为列表中的最后一个元素)。您可能想将其更改为:

Link ptr = head;
while(ptr.next != null){
ptr = ptr.next;
}

请注意,它不会导致 NPE,因为我们知道 head 不为空。进入下一部分。

node.next = null;
ptr = node;

现在 node.next 没问题(也没有必要,因为您在构造函数中将其初始化为 null),但是下一条指令应该做什么?它仅更改局部变量。您的意思可能是:

ptr.next = node;

关于java - java在链表末尾插入节点时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com