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

C#でLinkedList(連結リスト)の特定ノードの前に新しいノードを追加する方法

C#のLinkedList<T>クラスを使うと、連結リスト内の任意の位置にノードを挿入できます。本記事では、AddBefore()メソッドを使用して、特定のノードの直前に新しいノードを追加する手順を解説します。

手順1:LinkedListの宣言とノードの追加

まず、文字列配列をもとにLinkedListを作成し、初期ノードを設定します。

string[] students = {"Tim","Jack","Henry","David","Tom"};
LinkedList<string> list = new LinkedList<string>(students);

手順2:基準となるノードを追加する

次に、挿入位置の基準となる新しいノードをリストの末尾に追加します。AddLast()メソッドは、追加されたノードへの参照(LinkedListNode<T>)を返す点がポイントです。

var newNode = list.AddLast("Kevin");

手順3:AddBefore()メソッドでノードを挿入する

指定したノードの直前に新しいノードを追加するには、AddBefore()メソッドを使用します。第1引数に基準ノード、第2引数に挿入する値を渡します。

list.AddBefore(newNode, "Matt");

サンプルコード全体

using System;
using System.Collections.Generic;

class Demo {
   static void Main() {
      string[] students = {"Tim","Jack","Henry","David","Tom"};
      LinkedList<string> list = new LinkedList<string>(students);

      foreach (var stu in list) {
         Console.WriteLine(stu);
      }

      // 末尾にノードを追加
      var newNode = list.AddLast("Kevin");

      // 上で追加したノードの前に新しいノードを挿入
      list.AddBefore(newNode, "Matt");

      Console.WriteLine("新しいノード追加後のLinkedList...");
      foreach (var stu in list) {
         Console.WriteLine(stu);
      }
   }
}

実行結果

Tim
Jack
Henry
David
Tom
新しいノード追加後のLinkedList...
Tim
Jack
Henry
David
Tom
Matt
Kevin

ポイント解説

  • AddLast()メソッドは戻り値としてLinkedListNode<T>オブジェクトを返すため、その参照をそのまま挿入位置の指定に利用できます。
  • AddBefore()は既存ノードの参照があればO(1)の計算量で処理できるため、非常に効率的な挿入方法です。
  • 逆に、指定ノードの「後ろ」に追加したい場合は、AddAfter()メソッドを使用します。
  1. Cプログラムで指定されたリストの中央値を求める方法

    リストの要素を大きさの順に並べたとき、全体を同じ個数の2つの部分に分ける中央の値を中央値(メディアン)と呼びます。 要素数が奇数の場合には中央の値がちょうど1つだけ現れますが、偶数の場合には中央に2つの値が並ぶことになります。 そのため、偶数個の要素に対する中央値は「中央にある2つの値の平均」として定義されます。 アルゴリズム 中央値を計算するための手順は、以下のようになります。 要素の個数を数えながら、配列へ値を読み込みます。 値を昇順に並べ替えます。 中央値を計算します。 並べ替え(ソート)のロジック 中央値を求める前に数値を並べ替えるための処理は、隣り合う要素を比較しながら入れ替え

  2. C言語で連結リストの末尾からn番目のノードを取得するプログラム

    n個のノードからなる連結リストが与えられたとき、その末尾からn番目のノードを出力するのが本記事の目的です。プログラムはリスト内のノードの並び順を変更してはならず、あくまで末尾から数えてn番目に位置するノードの値を表示するだけでなければなりません。具体例入力 -: 10 20 30 40 50 60   N = 3 出力 -: 40上記の例では、先頭ノードから順に「count − n」個目までのノード(10, 20, 30, 40, 50, 60)を走査し、末尾から3番目のノードとして 40 が得られます。効率的なアプローチリスト全体を最後まで走査しなくても、以下の手順で目的のノードを見つけられ