2017-06-13 47 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的下一个应该为空。

如果您通过头访问您的链接列表,删除头将删除整个列表。在这种情况下,你应该让头的后继者成为新的头。