链接列表链接

时间:2012-04-18 20:51:23

标签: c# linker linked-list

我只需要在C#中使用链接列表提供一些帮助,C ++中的链接列表有点容易使用指针但我在C#中面临一些问题 我阅读了http://msdn.microsoft.com上提供的示例,但我无法弄清楚如何链接两个不同的链接列表

效率方式似乎将LinkedListNode放入链表中,所以假设我有两个链表

LinkedList L1 = new LinkedList();   LinkedList L2 = new 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; 我完全失败了一个错误:属性或索引器&#39; System.Collections.Generic.LinkedListNode&amp; amp; lt; string&gt; .Next&#39;无法分配 - 它是只读的

好吧,我试过这个:

Ln2.Next = Ln3; 我又失败了

我的最后一次尝试是

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

出现错误:属性或索引器&#39; System.Collections.Generic.LinkedListNode&amp; amp; lt; string&gt; .Next&#39;无法分配 - 它是只读的

所以请帮忙吗?如何链接他们?

另外一个问题: 是否可以通过其索引来到达链表中的元素?例如?

我推出了这个简单的算法,它可以工作:

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

有自动方式吗?

谢谢你的帮助

3 个答案:

答案 0 :(得分:2)

LinkedListNode具有属性List。此属性指向列表,属于哪个节点。将节点添加到某个列表时,将设置此属性。因此,一次节点只能属于一个列表。这意味着您应该从一个列表中删除节点,然后再将其添加到另一个列表中:

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个节点。

答案 1 :(得分:1)

回答第一个问题,将L1的最后一个元素链接到L2的第一个元素

L2.AddFirst(L1.Last.Value);

答案 2 :(得分:1)