繁体   English   中英

c#如何链接2个LinkedListNode?

[英]c# how to link 2 LinkedListNode?

我创建了一个Linked列表和几个节点,我想链接那些节点,不断收到此错误消息。

属性或索引器System.Collections.Generic.LinkedListNode <>。下一个无法分配给它是只读的。

        var link = new LinkedList<int>();
        var node1 = new LinkedListNode<int>(1);
        var node2 = new LinkedListNode<int>(2);
        var node3 = new LinkedListNode<int>(3);

        link.AddFirst(node1);
        link.AddFirst(node2);
        link.AddFirst(node3);

        node1.Next = node2;  ---> .next is read only
        node2.Next = node3;  ---> .next is read only

您需要使用列表的AddAfterAddBefore方法。 使用这些,您可以直接在给定项目之前或之后插入项目。

遗憾的是,.NET中的LinkedListNode<T>类不允许您直接更改NextPrevious属性,因为它们没有set访问器。

如果要更改列表的顺序,还需要使用“ 删除”方法从之前的位置删除项目。 我推荐以下表格:

LinkedListItem<T> foo = /*fetch your item here*/
LinkedListItem<T> bar = /*the one to come right after foo,
    as a result of running the code*/
list.Remove(foo);
list.AddBefore(bar, foo);

您可以将其更改为插入而不是之前插入。

您不必链接它们。 当您调用AddFirst方法时,它会自动将它们链接到第一个节点,然后该节点成为第二个节点。

您正在尝试将项目添加到其他项目,但您应该将它们添加到您已经在执行的LinkedList本身:

link.AddFirst(node1);
link.AddFirst(node2);
link.AddFirst(node3);

你想改变他们的订单吗? 看起来只能在添加它们时才能完成,基于LinkedList<T>的可用方法 所以你想要做这样的事情:

link.AddFirst(node1);
link.AddAfter(node1, node2);
link.AddAfter(node2, node3);

或者,在您的情况下,只需将调用顺序反转为.AddFirst()将产生相同的结果:

link.AddFirst(node3);
link.AddFirst(node2);
link.AddFirst(node1);

这会将node3添加到列表的开头,然后将node2添加到列表的开头(将node3推送到第二个元素),然后将node1添加到列表的开头(将node3到第三个元素,将node2到第二个元素)元件)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM