C#でLinkedList(リンクリスト)から指定した値の最初のノードを削除する方法
C#のLinkedList<T>クラスでは、Remove()メソッドを使うことで、指定した値と一致する最初のノードを簡単に削除できます。この記事では、具体的なコード例を通じてその使い方を解説します。
LinkedListの作成
まず、文字列型のノードを格納したLinkedListを作成します。
string[] students = {"Katie", "Jennifer", "Amy", "Vera"};
LinkedList<string> list = new LinkedList<string>(students);
ここでは、「Katie」「Jennifer」「Amy」「Vera」という4つの要素を持つリンクリストが生成されます。
Remove()メソッドでノードを削除する
次に、文字列要素「Vera」を持つノードを削除してみましょう。削除にはRemove()メソッドを使用します。
list.Remove("Vera");
Remove()メソッドは、リスト内を先頭から走査し、引数に指定した値と一致する最初に出現したノードのみを削除します。該当するノードが存在しない場合は、リストは変更されず、falseが返されます。
サンプルコード全体
using System;
using System.Collections.Generic;
class Demo {
static void Main() {
string[] students = {"Katie", "Jennifer", "Amy", "Vera"};
LinkedList<string> list = new LinkedList<string>(students);
foreach (var stu in list) {
Console.WriteLine(stu);
}
// ノードを削除
list.Remove("Vera");
Console.WriteLine("LinkedList after removing a node...");
foreach (var stu in list) {
Console.WriteLine(stu);
}
}
}
実行結果
Katie Jennifer Amy Vera LinkedList after removing a node... Katie Jennifer Amy
ポイントまとめ
Remove(T value)は、指定した値と一致する最初のノードだけを削除します。- 削除対象が見つかった場合は
true、見つからなかった場合はfalseを返します。 - すべての一致ノードを削除したい場合は、
while (list.Remove(value)) { }のようにループ処理を組み合わせます。 - 先頭や末尾のノードを削除したい場合は、それぞれ
RemoveFirst()やRemoveLast()メソッドが便利です。
-
C言語で連結リストの末尾からn番目のノードを取得するプログラム
n個のノードからなる連結リストが与えられたとき、その末尾からn番目のノードを出力するのが本記事の目的です。プログラムはリスト内のノードの並び順を変更してはならず、あくまで末尾から数えてn番目に位置するノードの値を表示するだけでなければなりません。具体例入力 -: 10 20 30 40 50 60 N = 3 出力 -: 40上記の例では、先頭ノードから順に「count − n」個目までのノード(10, 20, 30, 40, 50, 60)を走査し、末尾から3番目のノードとして 40 が得られます。効率的なアプローチリスト全体を最後まで走査しなくても、以下の手順で目的のノードを見つけられ
-
Pythonで連結リストの後ろからK番目のノードを見つけるプログラム
問題概要片方向連結リストが与えられたとき、後ろからk番目のノード(0始まりのインデックス)の値を求めることを考えます。ただし、この問題はリストを1回の走査(シングルパス)で解く必要があります。例えば、入力が node = [5,4,6,3,4,7]、k = 2 の場合、出力は 3 になります。これは、後ろから2番目(インデックス3)のノードの値が3であるためです。解法のアプローチ:2ポインタ技法この問題を効率的に解くには、2つのポインタを使う手法が有効です。片方のポインタを先にkステップだけ進めておき、その後両方のポインタを同時に末尾へ向けて進めます。先頭のポインタが末尾に到達したとき、もう片