将节点添加到链接列表的末尾

时间:2016-04-19 20:15:47

标签: java linked-list

在链接的末尾添加节点时遇到问题 代码非常自我解释,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循环中。

2 个答案:

答案 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);
}