我不确定这是否是为我的循环列表创建删除方法的正确方法,我也遇到了使其适用于1节点列表的问题。
public void remove() {
if(first.getNext() == null) {
first = null;
first.setNext(null);
} else {
Node current = first;
for(int i = 0; i < getSize() - 1; i++) {
current = current.getNext();
}
first = first.getNext();
current.setNext(first);
size--;
}
}
我让它适用于大于2的列表,但我不确定这是否是解决问题的最佳方法。有没有人提出改进方法的建议,以及正确删除一个节点列表?即使我将第一个节点设置为null,并且下一个节点也设置为null,它仍会返回原始输入。
编辑:对于将来关注此事的任何人,我只是打印出一条消息,说明您无法删除该元素。因为我的任务对于该怎么做非常模糊。
答案 0 :(得分:1)
这不起作用。我想,它根本无法执行以下部分:
first = null;
first.setNext(null);
我认为这会引发NullpointerException的原因。您首先将first
设置为null,然后尝试取消引用null
。
我不会为您提供确切的代码(因为这是某种功课吗?;)),但请检查维基百科(http://en.wikipedia.org/wiki/Doubly_linked_list)中的伪代码:
function remove(List list, Node node)
if node.prev == null
list.firstNode := node.next
else
node.prev.next := node.next
if node.next == null
list.lastNode := node.prev
else
node.next.prev := node.prev
destroy node