在链接的末尾添加节点时遇到问题 代码非常自我解释,addToEnd方法将单个节点添加到链表的末尾。
public class ll5 {
// Private inner class Node
private class Node{
int data;
Node link;
public Node(int x, Node p){
data = x;
link = p;
}
}
// End of Node class
public Node head;
public ll5(){
head = null;
}
public void addToEnd(int data) {
Node p = head;
while (p.link != null)
p=p.link;
p.link=new Node(data, null);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ll5 list = new ll5();
list.printList();
System.out.println("How many values do you want to add to the list");
int toAdd = input.nextInt();
for(int i = 0; i < toAdd; i++) {
System.out.println("Enter value " + (i + 1));
list.addToEnd(input.nextInt());
}
System.out.println("The list is:");
list.printList();
input.close();
}
}
为什么它会给我一个NullPointerException错误?该错误位于addToEnd方法的while循环中。
答案 0 :(得分:2)
当list没有任何内容且head为null时,你还没有处理初始条件。因为你正在获得NPE。
以下方法应该有效。
public void addToEnd(int data) {
Node p = head;
if( p == null) {
head = new Node(data, null);
} else {
while (p.link != null)
p=p.link;
p.link=new Node(data, null);
}
}
答案 1 :(得分:0)
那是因为头部在开头是空的
public ll5(){
head = null; // <-- head is null
}
public void addToEnd(int data) {
Node p = head; //<-- you assigned head, which is null, to p
while (p.link != null) //<-- p is null, p.link causes NullException
p=p.link;
p.link=new Node(data, null);
}