java删除节点链表

时间:2017-02-09 15:18:33

标签: java linked-list

我有一个链表,我想根据其中的数据从中删除一个节点。

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)方法找到的节点之前的节点,但不知何故只是搞砸了。

1 个答案:

答案 0 :(得分:3)

如果要删除节点,则需要更改相邻节点的nextprevious字段。

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有单独的引用,则需要在删除的节点位于列表的开头或结尾的情况下重新分配它们。