2017-06-13 22 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

削除されたノードをnullにする必要はありませんか?それでもまだ存在するので、私達はそれに到達することはできません。 – yosu

+0

CまたはC++では、これを実行する必要がありました。 C#では必須ではありません。ガベージコレクタがそれを拾うでしょう。 – doremifasolasido

0

明確にする:あなたは、そのオブジェクトのプロパティに基づいて、リンクリスト内のオブジェクトを削除します。 3つのケース:

  1. 残りのリストは有効なリンクリストです。
  2. 中間の要素Eを削除する:要素Eの後継者を接続します。この場合、Manfred Radlwimmerの答えが有効です。
  3. 最後の要素を削除します。E:先行者.Eの次の要素はnullになります。

リンクされたリストにヘッドでアクセスすると、ヘッドを削除するとリスト全体が削除されます。その場合は、頭の後継者を新しい頭にする必要があります。

関連する問題