C#で指定した値を含むLinkedListの最後のノードを検索する方法
C#のLinkedListコレクションで、指定した値を含む最後のノードを検索するには、FindLast()メソッドを使用します。このメソッドは、リストの末尾から先頭に向かって走査を行い、指定された値と一致する最初(つまりリスト内で最後)のノードを返します。該当する値が存在しない場合はnullを返します。
FindLast()メソッドの基本構文
public LinkedListNode<T>? FindLast (T value);
戻り値はLinkedListNode<T>型であり、ノードの値にはValueプロパティを使ってアクセスできます。
サンプルコード1:int型のLinkedListの場合
以下は、整数値のLinkedListから指定した値を含む最後のノードを検索する例です。
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);
}
LinkedListNode<int> val = list.FindLast(300);
Console.WriteLine("検索対象の値 = " + val.Value);
}
}実行結果
上記のコードを実行すると、次の出力が得られます。
LinkedListの要素... 100 200 300 400 500 300 500 検索対象の値 = 300
この例では、値「300」はリスト内に2箇所(3番目と6番目)に存在します。FindLast()は末尾側から検索するため、後方にある「300」のノードが返されている点に注目してください。
サンプルコード2:string型のLinkedListの場合
次に、文字列のLinkedListに対して同じ処理を行う例を見てみましょう。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
LinkedList<String> list = new LinkedList<String>();
list.AddLast("One");
list.AddLast("Two");
list.AddLast("Three");
list.AddLast("Four");
list.AddLast("Five");
Console.WriteLine("LinkedListの要素...");
foreach (string res in list) {
Console.WriteLine(res);
}
LinkedListNode<string> val = list.FindLast("Five");
Console.WriteLine("検索対象の値 = " + val.Value);
}
}実行結果
上記のコードを実行すると、次の出力が得られます。
LinkedListの要素... One Two Three Four Five 検索対象の値 = Five
Find()とFindLast()の違い
LinkedListには類似のメソッドとしてFind()も用意されています。両者の違いは以下の通りです。
- Find():先頭から検索し、最初に一致したノードを返す
- FindLast():末尾から検索し、最後に一致したノードを返す
重複した値が含まれる可能性がある場合に、どちらのメソッドを使うかは取得したいノードの位置によって使い分けるとよいでしょう。
-
C#でリンクリスト(LinkedList)のノードを検索する方法
C#のLinkedList<T>クラスには、指定した値を持つノードを検索するためのFindメソッドが用意されています。本記事では、リンクリストから特定のノードを検索し、そのノードの直後に新しい要素を追加する手順を、サンプルコードと実行結果付きで解説します。 リンクリストの作成と要素の追加 まず、新しいリンクリストを作成します。 LinkedList<string> myList = new LinkedList<string>(); 次に、AddLastメソッドを使って、リンクリストの末尾に6つの要素を追加します。 // リンクリストに6つの要素を追加 my
-
Pythonで連結リストの後ろからK番目のノードを見つけるプログラム
問題概要片方向連結リストが与えられたとき、後ろからk番目のノード(0始まりのインデックス)の値を求めることを考えます。ただし、この問題はリストを1回の走査(シングルパス)で解く必要があります。例えば、入力が node = [5,4,6,3,4,7]、k = 2 の場合、出力は 3 になります。これは、後ろから2番目(インデックス3)のノードの値が3であるためです。解法のアプローチ:2ポインタ技法この問題を効率的に解くには、2つのポインタを使う手法が有効です。片方のポインタを先にkステップだけ進めておき、その後両方のポインタを同時に末尾へ向けて進めます。先頭のポインタが末尾に到達したとき、もう片