C# 如何拼接两个LinkedList<;T>;
我有一个C# 如何拼接两个LinkedList<;T>;,c#,linked-list,splice,C#,Linked List,Splice,我有一个链接列表的列表: intx=y; 列表=新列表(x); 我希望能够将列表的链接列表的所有元素移动到另一个列表中,而无需创建新列表或节点。这就是我选择LinkedList类型的原因。在C++中,我可以使用.< /p> 最后,列表中只有一个元素不会为空 我的问题是,我无论如何都找不到这样做的方法,我只找到了将两个LinkedList复制成一个或类似的方法 我目前的研究(这不是我想要的): 注:我不关心数据顺序,我只需要性能。如果“我只需要性能”的意思是需要拼接操作为O(1),那么
链接列表的列表
:
intx=y;
列表=新列表(x);
我希望能够将列表的链接列表
的所有元素移动到另一个列表中,而无需创建新列表或节点。这就是我选择LinkedList
类型的原因。在C++中,我可以使用.< /p>
最后,列表
中只有一个元素不会为空
我的问题是,我无论如何都找不到这样做的方法,我只找到了将两个LinkedList
复制成一个或类似的方法
我目前的研究(这不是我想要的):
注:我不关心数据顺序,我只需要性能。如果“我只需要性能”的意思是需要拼接操作为O(1),那么,据我所知,这在.NET中是不可能的
但是,您可以创建自己的类型,该类型的行为类似于LinkedList
,并且支持这种拼接操作。当然,实现已经存在的功能并不好,但另一方面,链表并没有那么复杂
或者,您可以创建一个包装列表
(或类似内容)并支持所需操作的类型。例如,LinkedList
实现了IEnumerable
和ICollection
,而在List
的包装器上实现这些功能只需要几行相对简单的代码,拼接操作几乎是免费的。我有点困惑。列表
类似于C++的std::vector
。List
与这个问题有什么关系?@milleniumbug我为上下文添加了一个列表,也许它没用。但实际上,我希望LinkedList上有一个方法splice,或者一个使用其他容器的解决方案,该容器将实现splice并在该操作上具有O(1)。另外:左侧和右侧是否与示例代码所述的类型不同?那么列表
和链接列表
呢?更不用说,C++的std::list::splice
也是O(n)(但可能仍然很快),因为rhs列表必须保持size()
。接受一个LinkedListNode
,需要另一行从源中删除节点。如果需要将其设置为O(1),则需要一个具有O(n).Count的链表类。NET中没有这样的内置类
int x = y;
List<LinkedList<foo>> list = new List<LinkedList<foo>>(x);