【问题标题】:Append LinkedList to the end of another LinkedList? [duplicate]将 LinkedList 附加到另一个 LinkedList 的末尾? [复制]
【发布时间】:2012-11-16 01:43:17
【问题描述】:

假设我有以下内容:

LinkedList<int> list1 = new LinkedList<int>();
LinkedList<int> list2 = new LinkedList<int>();

list1.AddLast(1);
list1.AddLast(2);

list2.AddLast(1);
list2.AddLast(2);

据我所知,您不能执行以下操作;

list1.AddLast(list2.First);

除了要连接在一起的列表。

在 C# 中合并两个 LinkedList 的正确方法是什么?我知道有一个 Union() 方法,但似乎 C++ 中 LinkedList 的优势在于您可以在需要时轻松组合和拆分列表。

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

【问题讨论】:

标签: c#


【解决方案1】:

如果您使用List 而不是LinkedList,同样简单。以下是完成整个列表的几种方法。

LINQ;

var combinedList = list1.Concat(list2).ToList();

我在 msdn 上找到的其他方式;

List<int> combinedList = new List<int>();
combinedList.AddRange(list1);
combinedList.AddRange(list2);

【讨论】:

  • 我选择 LinkedList 是因为我认为它是组合和拆分列表的理想选择。列表是否更适合此类问题?
  • 我会这么说。特别是因为 LINQ 有一个 ToList() 而我不认为它有一个 ToLinkedList() 等价物。根据这篇文章stackoverflow.com/questions/5983059/… 链表也有更差的性能。
  • 在我的个人测试中,我无法提出 LinkedList 比标准 .NET 列表更有效的情况。我测试了插入、连接、删除、迭代等。从来没有一个链接列表比标准 List 类更好的情况。
  • @evanmcdonnal,LinkedLists 在添加、删除记录时具有更好的性能。特别是,您可以看到从列表中间删除项目时的性能改进。
  • 微软文档说列表中的 RemoveAt 是“一个 O(n) 操作,其中 n 是 (Count - index)”,这意味着它必须向上移动内容。因此,使用链表(RemoveFirst/RemoveLast)从开头或结尾删除应该更快
猜你喜欢
  • 1970-01-01
  • 2020-05-30
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多