尝试在Java中创建双端队列时出现Nullpointer异常

时间:2012-09-15 21:07:47

标签: java nullpointerexception deque doubly-linked-list

我一直在尝试用Java创建一个deque,但是当我添加一个新节点时,我得到一个nullpointer异常。这是我用于双向链表的辅助类:

private class Node {
    private Item item;
    private Node next;
    private Node prev;
}

然后我将节点添加到列表的开头,如下所示:

    public void addFirst(Item item) {
    Node oldfirst = first;
    first = new Node();      
    first.prev = null;
    first.item = item;
    first.next = oldfirst;
    oldfirst.prev = first;        
    N++;
}

我的NullPointer行有oldfirst.prev = first;个例外。此外,当我编译代码时,我收到以下警告:

Warning: The field Deque2<Item>.Node.prev is never read locally

我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

该异常意味着oldfirst为空。并将其初始化为Node oldfirst = first,这意味着first为空。

答案 1 :(得分:0)

我的猜测是当你的双端队列为空时,first为空。然后,当您将first分配到oldFirst时,会使oldFirst为空,因此尝试访问prev会给出一个NPE。将访问权限更改为:

if (oldFirst != null)
    oldfirst.prev = first;

应该修复它。

你的警告可能只是因为你在你的双端空间中没有使用prev,你只是设置它。有趣的事实:使用双端队列,您不需要需要双向链表,因此不太可能使用prev变量。如果您还希望支持排队等候排队(类似于LinkedList实施DequeQueue的方式),那么您需要保留prev。< / p>