2017-06-13 43 views
1

方法找到我想要刪除的下一個節點的前一個節點。然後我嘗試將前一個節點與我想要刪除的節點的下一個節點連接起來,但是我得到的結果是隻有第一個元素的鏈接列表,而其他節點已刪除。鏈接列表刪除節點不起作用

public void DeleteNode(Studentas stud) 
{ 
    for (Mazgas d = head; d != null; d = d.Next) 
    { 
     if (d.Next == null) 
     { 
      break; 
     } 
     else if (d.Next.Duom.Name == stud.Name) 
     { 
      Mazgas v = d; 
      v.Next = d.Next.Next; 
      d.Next = null; 
      break; 
     }  
    } 
} 

回答

0

沒有編譯它,但應該工作:

public void DeleteNode(Studentas stud) 
{ 
    for (Mazgas d = head; d != null; d = d.Next) 
    { 
     if (d.Next == null) 
     { 
      break; 
     } 
     else if (d.Next.Duom.Name == stud.Name) 
     { 
      d.Next = d.Next.Next; 
      break; 
     }  
    } 
} 
+0

我們是否需要將刪除的節點設置爲空?因爲它仍然存在,但我們無法達到它。 – yosu

+0

在C或C++中,我們不得不這樣做。在C#中不是強制性的。垃圾收集器會把它撿起來。 – doremifasolasido

0

澄清:你想在一個鏈表中刪除對象,根據該對象的屬性。三種情況:

  1. 刪除列表頭:剩餘是一個有效的鏈接列表。
  2. 刪除中間元素E:將前導元素與元素E的後繼元素連接起來。Manfred Radlwimmer的答案應該適用於這種情況。
  3. 刪除最後一個元素E:前導。E的下一個應該爲空。

如果您通過頭訪問您的鏈接列表,刪除頭將刪除整個列表。在這種情況下,你應該讓頭的後繼者成爲新的頭。