2017-02-09 114 views
-1

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

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

回答

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单独引用,你需要重新分配他们在你删除的节点放置在列表的开头或结尾的情况。