0

所以我在java中有一个双向链表,我正在测试它,但是当我决定删除同一索引处的两个元素时,它抛出了一个空指针异常

这是我的清单 [A, B, C, D, E] 这是我的测试

System.out.println("Item removed at index 3: " + list.removeAtIndex(3));
System.out.println(list);
//throws exception at following line
System.out.println("Item removed at index 3: " + list.removeAtIndex(3));
System.out.println(list);

list 应该是 [ A, B, C] 但它会抛出异常这是我对 removeAtIndex 方法的实现

public E removeAtIndex(int index) {
    DoublyLinkedNode<E> node = firstNode;
    for(int i = 0; i < index; i++)
    {
        node = node.getNext();
    }
    E item = node.getItem();
    node.getPrevious().setNext(node.getNext());
    node.getNext().setPrevious(node.getPrevious());
    return item;
 }

我怎样才能解决这个问题?

编辑:我忘了说,当我在一个索引处删除然后再次但在另一个索引处删除时,它工作得很好

4

1 回答 1

1

我怀疑一个问题:

您没有使用哨兵(虚拟)标头和尾节点。所以当你从最后移除并调用

node.getNext().setPrevious(node.getPrevious());
node.getNext();//actually returns null at the end of a list

调用 getNext 和 getPrevious 方法后,您需要检查 null

于 2013-09-18T06:02:07.620 回答