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

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():末尾から検索し、最後に一致したノードを返す

重複した値が含まれる可能性がある場合に、どちらのメソッドを使うかは取得したいノードの位置によって使い分けるとよいでしょう。

  1. C#でリンクリスト(LinkedList)のノードを検索する方法

    C#のLinkedList<T>クラスには、指定した値を持つノードを検索するためのFindメソッドが用意されています。本記事では、リンクリストから特定のノードを検索し、そのノードの直後に新しい要素を追加する手順を、サンプルコードと実行結果付きで解説します。 リンクリストの作成と要素の追加 まず、新しいリンクリストを作成します。 LinkedList<string> myList = new LinkedList<string>(); 次に、AddLastメソッドを使って、リンクリストの末尾に6つの要素を追加します。 // リンクリストに6つの要素を追加 my

  2. Pythonで連結リストの後ろからK番目のノードを見つけるプログラム

    問題概要片方向連結リストが与えられたとき、後ろからk番目のノード(0始まりのインデックス)の値を求めることを考えます。ただし、この問題はリストを1回の走査(シングルパス)で解く必要があります。例えば、入力が node = [5,4,6,3,4,7]、k = 2 の場合、出力は 3 になります。これは、後ろから2番目(インデックス3)のノードの値が3であるためです。解法のアプローチ:2ポインタ技法この問題を効率的に解くには、2つのポインタを使う手法が有効です。片方のポインタを先にkステップだけ進めておき、その後両方のポインタを同時に末尾へ向けて進めます。先頭のポインタが末尾に到達したとき、もう片