2012-01-10 78 views
1

你好,我有一個雙鏈表設置,我有一個搜索工作,所有的東西,我只是想從它刪除。從java中的雙鏈表中刪除一個節點

對於我的搜索,我有:

public void firstNameSearch(String name) 
{ 
    Node u = header; 
    while (u != null && u.list() != name) 
    { 
     System.out.println("Searching List..."); 
      u = u.getNext(); 
    } 
    if (u.list() == name) 
    { 
     // what do I need to put here to delete it 

    } 
} 

我已經在職位上堆棧溢出看遍了,但我發現是在C中的,所以不是一個很大的幫助,我明白瞭如何概念使它刪除節點,只是不能得到它的功能。

預先感謝您。

+3

你究竟試過了什麼?什麼沒有用?你有沒有嘗試在調試器中調試它?這在C++或C#中與在Java中非常相似。你有沒有看過LinkedList的代碼,因爲它是一個雙向鏈表? C.F. 'LinkedList.unlink(Node)' – 2012-01-10 15:02:02

+6

'u.list()== name'和'u.list()!= name'幾乎肯定不會做你想做的事。改用'String.equals()'。 – NPE 2012-01-10 15:02:05

回答

1

它是一個非常基本的操作。我假設有一個set/getPrevious()方法作爲它的雙鏈表。

[previous]<==>[u]<==>[next] 

刪除的雙向鏈表的元素將是一個和下一個節點的simply changing the references指針。

if (u.list() == name) 
    { 
     Node pre = u.getPrevious(); 
     Node next= u.getNext(); 

     //Connect next node and previous node 
     if(pre != null){ 
      next.setPrevious(pre); 
     }else{ 
     header=next; 
     } 

    //Connect previous node and next node 
     if(next != null){ 
      pre.setNext(next); 
     }else{ 
      pre.setNext(null); 
     } 




    } 
+0

這工作出色,非常感謝你! – 2012-01-10 15:32:45