C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のLinkedListから指定したノードを削除する方法

C#のLinkedList<T>から指定したノード(値)を削除するには、Remove()メソッドを使用します。このメソッドは、リスト内に同じ値が複数存在する場合でも、最初に出現した1つのノードだけを削除します。削除が成功するとtrue、値が見つからなければfalseを返します。

例1:int型のLinkedListから値を削除する

次の例では、整数値を格納したLinkedListを作成し、FindLast()で特定の値を検索した後、Remove()メソッドで値「500」を削除しています。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      LinkedList<int> list = new LinkedList<int>();
      list.AddLast(100);
      list.AddLast(200);
      list.AddLast(300);
      list.AddLast(400);
      list.AddLast(500);
      list.AddLast(300);
      list.AddLast(500);

      Console.WriteLine("LinkedListの要素...");
      foreach(int i in list) {
         Console.WriteLine(i);
      }

      // 最後に出現する「300」のノードを取得
      LinkedListNode<int> val = list.FindLast(300);
      Console.WriteLine("指定した値 = " + val.Value);

      // 最初に出現する「500」を削除
      list.Remove(500);

      Console.WriteLine("LinkedListの要素...更新後");
      foreach(int i in list) {
         Console.WriteLine(i);
      }
  }
}

出力結果

LinkedListの要素...
100
200
300
400
500
300
500
指定した値 = 300
LinkedListの要素...更新後
100
200
300
400
300
500

ご覧のとおり、リストには「500」が2つ存在していましたが、Remove(500)を実行すると先頭側の「500」のみが削除され、末尾の「500」はそのまま残ります。

例2:string型のLinkedListから要素を削除する

続いて、文字列を格納したLinkedListの例です。CopyTo()メソッドで配列へコピーした後、Remove()メソッドで「Harry」を削除しています。

using System;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      LinkedList<string> list = new LinkedList<string>();
      list.AddLast("Mark");
      list.AddLast("David");
      list.AddLast("Harry");
      list.AddLast("John");
      list.AddLast("Kevin");

      string[] strArr = new string[5];
      list.CopyTo(strArr, 0);

      Console.WriteLine("配列にコピー後のLinkedListの要素...");
      foreach(string str in strArr) {
         Console.WriteLine(str);
      }

      // 「Harry」を削除
      list.Remove("Harry");

      Console.WriteLine("LinkedListの要素...更新後");
      foreach(string str in list) {
         Console.WriteLine(str);
      }
  }
}

出力結果

配列にコピー後のLinkedListの要素...
Mark
David
Harry
John
Kevin
LinkedListの要素...更新後
Mark
David
John
Kevin

まとめ

  • Remove(T value):指定した値が最初に出現するノードを削除し、成功すればtrueを返す。
  • Remove(LinkedListNode<T> node):特定のノードオブジェクトそのものを直接削除することも可能。
  • FindLast(T value):指定した値が最後に出現するノードを取得できる。

LinkedListは要素の挿入・削除をO(1)で行えるため、頻繁に追加や削除が発生する場面で特に有用なコレクションです。

  1. C言語で連結リストの末尾からn番目のノードを取得するプログラム

    n個のノードからなる連結リストが与えられたとき、その末尾からn番目のノードを出力するのが本記事の目的です。プログラムはリスト内のノードの並び順を変更してはならず、あくまで末尾から数えてn番目に位置するノードの値を表示するだけでなければなりません。具体例入力 -: 10 20 30 40 50 60   N = 3 出力 -: 40上記の例では、先頭ノードから順に「count − n」個目までのノード(10, 20, 30, 40, 50, 60)を走査し、末尾から3番目のノードとして 40 が得られます。効率的なアプローチリスト全体を最後まで走査しなくても、以下の手順で目的のノードを見つけられ

  2. C#でLinkedListの指定したノードの後にノードを追加する方法

    C#では、LinkedList<T>クラスを使うことで、双方向リンクリストを簡単に操作できます。この記事では、リンクリスト内の指定されたノードの直後に新しいノードを追加する方法を、具体的なコード例とともに解説します。 LinkedListの作成と初期化 まず、文字列配列をもとにLinkedListを作成し、初期要素を設定します。 string[] students = {Beth, Jennifer, Amy, Vera}; LinkedList<string> list = new LinkedList<string>(students); AddLa