2015-09-17 14 views
-4

我想從列表中刪除一個節點,但該節點不會消失。該方法應該遍歷列表並檢查toDelName ==任何名稱節點。如果它確實會刪除節點。鏈接列表Java:我寫了一個方法,應該刪除一個節點,但它不工作

public static void removeName(String toDelName, Names list) 
{ 
    Names current = list; 

    while (current.next != null) 
    { 
     if (current.name.equalsIgnoreCase(toDelName)) 
     { 
      current.prev.next = current.next; 
      current.next.prev = current.prev; 

     } 
     current.prev = current; 
     current = current.next; 
    } 

} 
+1

你的問題是? –

+0

這是一個雙鏈表嗎? – YoungHobbit

+0

什麼「不工作」?你最好給一些輸入,期望的輸出和實際的輸出 – gefei

回答

0

你行有起源的問題:

current.prev = current; 

您應該刪除該行。原因是,每次執行該行時,current.prev都會設置爲當前。因此,current.prev.next(你試試你的,如果情況內部分配)會,while循環的第一次迭代後,總有值current.next - 你的任務因此

current.prev.next = current.next; 

做一點都沒有。

你可能試圖用當前的名字更新你的對象。但是,在面向對象編程中這不是必需的。 current.prev指向當前分配給current.next時立即更改的值。

0
  1. 當您的條件不匹配時,然後向前移動。所以你不需要current.prev = current;
  2. 另外,當您需要刪除列表的最後一個節點時,您還沒有處理這種情況。

    public void removeName(String toDelName, Names list) { 
        Names current = list; 
    
        while (current.next != null) { 
        if (current.name.equalsIgnoreCase(toDelName)) { 
         current.prev.next = current.next; 
         current.next.prev = current.prev; 
         return; 
        } 
        current = current.next; 
        } 
    
        if (current.name.equalsIgnoreCase(toDelName)) { 
        current.prev.next = null; 
        } 
    } 
    

//打印列表檢查。

public static void print(Names start) { 
     while (start != null) { 
     System.out.println(start.getName()); 
     start = start.getNext(); 
     } 
    } 
相關問題