C#でリンクリスト(LinkedList)のノードを検索する方法
C#のLinkedList<T>クラスには、指定した値を持つノードを検索するためのFindメソッドが用意されています。本記事では、リンクリストから特定のノードを検索し、そのノードの直後に新しい要素を追加する手順を、サンプルコードと実行結果付きで解説します。
リンクリストの作成と要素の追加
まず、新しいリンクリストを作成します。
LinkedList<string> myList = new LinkedList<string>();
次に、AddLastメソッドを使って、リンクリストの末尾に6つの要素を追加します。
// リンクリストに6つの要素を追加
myList.AddLast("P");
myList.AddLast("Q");
myList.AddLast("R");
myList.AddLast("S");
myList.AddLast("T");
myList.AddLast("U");
Findメソッドでノードを検索して挿入
続いて、Findメソッドで値「R」を持つノードを検索し、その直後に新しいノード「ADDED」を挿入します。
LinkedListNode<string> node = myList.Find("R");
myList.AddAfter(node, "ADDED");
ポイント解説
- Findメソッド:引数に指定した値と一致する最初のノードを返します。該当するノードが存在しない場合はnullを返します。
- AddAfterメソッド:第1引数で指定したノードの直後に、第2引数の値を持つ新しいノードを追加します。
- LinkedListNode<T>:リンクリスト内の個々のノードを表す型です。Findメソッドの戻り値として取得でき、挿入位置の指定などに利用できます。
サンプルコード
リンクリスト内のノードを検索する一連の流れは、以下のコードで確認できます。
using System;
using System.Collections.Generic;
class Program {
static void Main() {
LinkedList<string> myList = new LinkedList<string>();
// リンクリストに6つの要素を追加
myList.AddLast("P");
myList.AddLast("Q");
myList.AddLast("R");
myList.AddLast("S");
myList.AddLast("T");
myList.AddLast("U");
// 値が"R"のノードを検索
LinkedListNode<string> node = myList.Find("R");
// 見つかったノードの直後に新しい要素を追加
myList.AddAfter(node, "ADDED");
foreach (var i in myList) {
Console.WriteLine(i);
}
}
}
実行結果
P Q R ADDED S T U
出力結果を見ると、「R」の直後に「ADDED」が挿入されていることがわかります。このように、FindメソッドとAddAfterメソッドを組み合わせることで、リンクリスト内の任意の位置へ柔軟に要素を追加できます。なお、検索対象の値がリストに存在しない場合、Findメソッドはnullを返すため、実際の開発ではnullチェックを行ってからAddAfterを呼び出すと安全です。
-
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++で双方向リンクリストのサイズ(要素数)を求めるプログラム
本記事では、双方向リンクリスト(Doubly Linked List)が与えられたときに、そのサイズ(要素数)を求めるC++プログラムの作成方法を詳しく解説します。 双方向リンクリストとは、片方向リンクリストと比べて、各ノードが前後両方向のリンクを持つため、前方にも後方にも自由に移動できる特殊なリンクリストです。まず、双方向リンクリストを理解するうえで重要な用語を確認しておきましょう。 リンク(Link):リンクリストの各リンクには、「要素」と呼ばれるデータが格納されます。 ネクスト(Next):各リンクには、次のリンクを指す参照「Next」が含まれます。 プレヴ(Prev):各リンクに