所以我在 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);
列表应为 [ 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;
}
我该如何解决这个问题?
编辑:我忘了说,当我在一个索引处删除然后再次删除但在另一个索引处时,它工作得很好
我怀疑有一个问题:
您没有使用哨兵(虚拟)标头和尾节点。所以当你从最后删除并打电话
node.getNext().setPrevious(node.getPrevious());
node.getNext();//actually returns null at the end of a list
在调用 getNext 和 getPrevious 方法后,您需要检查 null