我有一个链表,我想根据其中的数据从中删除一个节点。
public Node deleteNode(String a){
Node<String> temp = findNode(head, a);
temp = temp.previous;
System.out.println(temp.data);
temp = temp.getNext().getNext();
return temp;
}
这是我的代码,它在理论上应该可以工作,但它什么都不做。
如果删除“temp = temp.previous;”代码行,但删除我要删除的节点后的节点。如果我按原样运行它,那么它就不会删除任何东西。
print语句显示我正在使用findNode(head,a)方法找到的节点之前的节点,但不知何故只是搞砸了。
答案 0 :(得分:3)
如果要删除节点,则需要更改相邻节点的next
和previous
字段。
if (temp.next!=null) {
temp.next.previous = temp.previous;
}
if (temp.previous!=null) {
temp.previous.next = temp.next;
}
这会将temp
的两个相邻节点相互链接,绕过temp
。
然后删除temp
对其邻居的引用可能是有意义的,因此看起来它仍然不是列表的一部分。
temp.next = null;
temp.previous = null;
如果您对列表的head
和/或tail
有单独的引用,则需要在删除的节点位于列表的开头或结尾的情况下重新分配它们。