尝试在Java中创建deque时出现Nullpointer异常
我一直在尝试用Java创建一个deque,但是当我添加一个新节点时,我得到了一个nullpointer异常。以下是我用于双链接列表的帮助器类:尝试在Java中创建deque时出现Nullpointer异常,java,nullpointerexception,deque,doubly-linked-list,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
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++;
}
我得到了oldfirst.prev=first的NullPointer
异常代码>行。此外,当我编译代码时,我得到以下警告:
警告:从未在本地读取字段Deque2.Node.prev
我可能做错了什么?异常意味着oldfirst
为空。您将其初始化为节点oldfirst=first
,这意味着first
为空。我猜当您的数据为空时,first
为空。然后,当您将first
分配到oldFirst
中时,这会使oldFirst
为空,因此尝试访问prev
会产生NPE。将访问权限更改为:
if (oldFirst != null)
oldfirst.prev = first;
你应该把它修好
您的警告可能只是因为您没有经常使用prev
,而您只是在设置它。有趣的事实:使用deque,您不需要双链接列表,因此您的prev
变量不太可能被使用。如果您还想支持在路上使用您的deque进行排队(类似于实现deque
和Queue
),那么您需要保持prev
如果您的deque为空,那么first
可能为空,因此oldfirst
也将为空。Node oldfirst=first代码>首先是什么
?再次感谢。这是有道理的。谢谢大家。