Java 双链接列表的Addback方法

Java 双链接列表的Addback方法,java,doubly-linked-list,Java,Doubly Linked List,我意识到这应该是一个非常容易实现的方法,我不知道为什么这段代码不起作用 我在tail.next=node处得到一个NullPointerException。如果未注释掉,则无法通过测试仪 public void addBack (int x) { IntegerNode node = new IntegerNode(x,null); if (head == null) head = node; else{ node.prev = tail;

我意识到这应该是一个非常容易实现的方法,我不知道为什么这段代码不起作用

我在
tail.next=node
处得到一个
NullPointerException
。如果未注释掉,则无法通过测试仪

public void addBack (int x)
{
    IntegerNode node = new IntegerNode(x,null);
    if (head == null)
        head = node;
    else{
        node.prev = tail;
        //tail.next = node;
        tail = node;

    }

    count++;
}

当列表为空时,将头部和尾部设置为新元素。之后应该可以了,尽管更多的空检查很少是个坏主意

if (head == null) {
    head = node;
    tail = node;
} else {
    node.prev = tail;
    tail.next = null; // Did you really mean tail.next = node?  This looks more likely..
    tail = node;
}

tail是对列表中最后一个对象的引用如果列表中没有元素并尝试
addBack
,那么
tail
的值是多少?我也可以将tail指向节点,但这真的很重要吗?很明显,否则它是
null
。好吧,但这并不能真正解决我的问题。我应该完全摆脱tail.next吗?虽然我认为没有tail.next=node是我在测试中出现问题的根源。如果你需要一个tail,那么为什么它会有next=null以外的任何东西?这是一份循环清单吗?如果它不是圆形的,那么tail.next将始终为空。如果它是圆形的,那么为什么你需要一条尾巴呢?