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)で行えるため、頻繁に追加や削除が発生する場面で特に有用なコレクションです。
-
C言語で連結リストの末尾からn番目のノードを取得するプログラム
n個のノードからなる連結リストが与えられたとき、その末尾からn番目のノードを出力するのが本記事の目的です。プログラムはリスト内のノードの並び順を変更してはならず、あくまで末尾から数えてn番目に位置するノードの値を表示するだけでなければなりません。具体例入力 -: 10 20 30 40 50 60 N = 3 出力 -: 40上記の例では、先頭ノードから順に「count − n」個目までのノード(10, 20, 30, 40, 50, 60)を走査し、末尾から3番目のノードとして 40 が得られます。効率的なアプローチリスト全体を最後まで走査しなくても、以下の手順で目的のノードを見つけられ
-
C#でLinkedListの指定したノードの後にノードを追加する方法
C#では、LinkedList<T>クラスを使うことで、双方向リンクリストを簡単に操作できます。この記事では、リンクリスト内の指定されたノードの直後に新しいノードを追加する方法を、具体的なコード例とともに解説します。 LinkedListの作成と初期化 まず、文字列配列をもとにLinkedListを作成し、初期要素を設定します。 string[] students = {Beth, Jennifer, Amy, Vera}; LinkedList<string> list = new LinkedList<string>(students); AddLa