2016-04-19 206 views
3

将节点添加到链接的末尾时遇到问题 代码非常明显,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

我想,'节点p = head'使得'P = null'因为'head'是'null'当你调用'addToEnd '第一次。 – StepTNT

回答

2

当列表没有任何内容且head为空时,您还没有处理初始条件。因为你得到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); 
    } 
} 
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); 
}