1

C# のリンク リストのヘルプが必要です。C++ のリンク リストはポインターを使用すると簡単ですが、C# でいくつかの問題に直面しています。http://msdn.microsoft.com で提供されている例を読みましたが、方法がわかりませんでした 2 つの異なるリンク リストをリンクするには

効率的な方法は、 LinkedListNode をリンクリストに入れることであるように思われるので、2つのリンクリストがあるとしましょう

LinkedList L1 = 新しい LinkedList(); LinkedList L2 = 新しい LinkedList(); そして、次のノードがあるとしましょう

        LinkedListNode<String> Ln1 = new LinkedListNode<String>("Orange");
        LinkedListNode<String> Ln2 = new LinkedListNode<String>("Banana");
        LinkedListNode<String> Ln3 = new LinkedListNode<String>("Apple");
        LinkedListNode<String> Ln4 = new LinkedListNode<String>("Strawberry");

私は単に私が持っているリストにそれらを追加しました:

        L1.AddLast(Ln1);
        L1.AddLast(Ln2);
        L2.AddLast(Ln3);
        L2.AddLast(Ln4);

さて、 L1 の最後の要素を L2 の最初の要素にリンクしたいとしましょう。それは可能ですか? 私はこれを最初に試しました:

L1.Last.Next = L2.First; エラーで完全に失敗しました: プロパティまたはインデクサー 'System.Collections.Generic.LinkedListNode&lt;string>.Next' を割り当てることができません -- 読み取り専用です

さて、私はこれを試しました:

Ln2.Next = Ln3; また失敗した

私の最後の試みは

        LinkedListNode<String> node1=L1.Last;
        LinkedListNode<String> node2 = L2.First;
        node1.Next = node2;

エラー: プロパティまたはインデクサー 'System.Collections.Generic.LinkedListNode&lt;string>.Next' を割り当てることができません -- 読み取り専用です

助けてください。それらをリンクする方法は?

追加の質問: たとえば、リンクされたリスト内の要素にそのインデックスで到達する方法はありますか?

私はこの単純なアルゴリズムを思いつきましたが、うまくいきます:

         int i = 0;
        foreach (var item in L2)
        {
            Console.WriteLine(item);
            i++;
        }

自動的な方法はありますか?

ご協力ありがとうございました

4

2 に答える 2

2

LinkedListNodeにはプロパティListがあります。このプロパティは、どのノードが属するリストを指します。このプロパティは、ノードをリストに追加するときに設定されます。したがって、一度にノードは1つのリストにしか属することができませんでした。つまり、ノードを別のリストに追加する前に、あるリストからノードを削除する必要があります。

var node = L2.First;
L2.RemoveFirst();
L1.AddLast(node);

L2からすべてのノードを追加する場合は、次を使用できます。

while (L2.Count > 0)
{
    var node = L2.First;
    L2.RemoveFirst();
    L1.AddLast(node);
}

L2からすべてのノードが削除されることに注意してください。

別のオプション-同じ値で新しいノードを作成します。

foreach (string value in L2)
    L1.AddLast(value);

更新:リンクリスト内の要素にそのインデックスで到達したい場合は、最初のN個のアイテムをスキップして、次のアイテムを取得できます。

L1.Skip(index).First()

他のコレクションと同様に、そのリストには少なくともN-1個のノードがあることを確認する必要があります。

于 2012-04-18T21:03:22.117 に答える
1

最初の質問に答えて、L1 の最後の要素を L2 の最初の要素にリンクします

L2.AddFirst(L1.Last.Value);
于 2012-04-18T21:10:01.387 に答える