2017-02-09 146 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單獨引用,你需要重新分配他們在你刪除的節點放置在列表的開頭或結尾的情況。