"显示java.lang.NullPointerException"尝试将Last()添加到链表时

时间:2015-03-30 22:28:58

标签: java nullpointerexception linked-list

我正在尝试在单个链表的末尾插入一个新节点。但是我在编译后继续得到NullPointerException。

这是Node类。

class Node {
    private int data;
    private Node next;

    public Node(int x){
        data = x;
        next = null;
    }
    public int getData(){
        return data;
    }
    public Node getNext(){
        return next;
    } 
    public void setData(int newx){
        data = newx;
    }
    public void setNext(Node n){
        next = n;
    }   
}

这是单个LL类

public class SingleLL {
    protected Node head=null;
    protected Node tail=null;
    protected int size=0;

    public int getSize(){
        return size;
    }

    public void addLast(int x){
        Node newnode = new Node(x);
        if(size==0){
            head = newnode;
        }
        else{
            tail.setNext(newnode);
            tail = newnode;
        }
        size = size+1;
    }
    public void addfirst(int x){
        Node newnode = new Node(x);
        if(size==0){
            tail = newnode;
        }
        else{
            newnode.setNext(head);
            head = newnode;
        }
        size = size+1;
    }

方法addFirst()有效。 当我尝试通过addLast()创建LL时,会出现NullPointerException。我认为if(size==0){head = newnode;}一定有问题,但我无法弄明白。

public static void main(String arg[]){
        int[] a = {1,2,3,4,5,6};
        SingleLL myList = new SingleLL();
        for(int i=0;i<a.length;i++){
            myList.addLast(a[i]);
        }
    }           
}

2 个答案:

答案 0 :(得分:0)

addLastaddFirst中,您需要在列表为空时初始化headtail。否则,其中一个或另一个将永远不会被设置,并将导致您的NullPointerException

答案 1 :(得分:0)

// In your two add methods:
// addLast: because when size = 1, head equals tail
    if(size==0){
        head = newnode;
        tail = head;
    }
    // addFirst: because when size = 1, head equals tail
    if(size==0){
        tail = newnode;
        head = tail;
    }

请记住,NullPointException仅在“。”之前发生。就像tail.setNext();让我们看看,如果size = 1,你可以调用addLast。目前,head是您添加的newnode,但tail为null。所以当它使用tail.setNext()(实际上,null.setNext())会导致NullPointException。