在 C# 中以 O(1) 扩展列表 (AddRange)

LiR*_*RoN 5 c# linked-list list time-complexity addrange

我试图在 C# 中找到一个解决方案来扩展O(1).

List的AddRange()方法当然是一个O(n)操作。这应该是 LinkedList 支持的东西,但 LinkedList 没有像这样的方法AddRangeLast(),并试图像这样组合 LinkedLists:

LinkedList<int> l1 = new LinkedList<int>(new[] { 1, 2, 3 });
LinkedList<int> l2 = new LinkedList<int>(new[] { 11, 12, 13 });
l1.AddLast(l1.First);

Run Code Online (Sandbox Code Playgroud)

抛出这个异常:

System.InvalidOperationException: 'LinkedList 节点已经属于 LinkedList。'

有没有人知道在O(1)不自己实现 LinkedList 和 LinkedListNode 的情况下将列表添加到列表中的方法?

Hug*_*h W 1

不,这是不可能的System.Collections.Generic.LinkedList。来自文档

LinkedList 类不支持链接、拆分、循环或其他可能使列表处于不一致状态的功能。

对于一个几乎相同的问题,有一个更深入的答案:How does one add a LinkedList to a LinkedList in C#?