如何获取 LinkedList<T> 中的第 n 个元素?

31

我该如何获取LinkedList实例中的第n个元素?是否有内置的方法,或者我需要引入自己的实现?例如扩展方法?

谢谢


2
首先,为什么?你确定需要一个链表吗? - alexn
我有一个InsertedSortList的例子,它使用了LinkedList数据结构上的InsertAt(int i)等方法。这就是为什么我想问的原因。 - pencilCake
是 Stack Overflow 还是 MSDN 文档? - Failed Scientist
4个回答

43

ElementAt扩展方法可以完成这个任务:

// This is 0-based of course
var value = linkedList.ElementAt(n);

不要忘记这是一个O(n)操作,因为LinkedList<T>没有提供更有效的按索引访问项的方法。如果您需要经常执行此操作,那么建议您首先不要使用链接列表。


17
微软,请在文档中添加更多复杂性 :) - Fernando Pelliccioni
@Jon 不是挑剔,但如果我实现 IList<T>,索引操作是否必须为 O(n) - nawfal

6
您可以使用ElementAt()可枚举扩展方法。LinkedList不支持原生随机访问的原因是,这对于数据结构来说是一种相当低效的操作。如果您经常需要进行此操作,应考虑使用更合适的数据结构。

2

您可以使用LINQ来实现,如list.ElementAt(n)list.Skip(n - 1).First(),但是如果您发现自己需要对链表进行索引访问,则可能存在问题(链表不支持此操作的高效性)。也许另一种数据结构更适合?


2

我需要获取列表的第二个元素(以根据第二个元素更新第一个项目上的值)

假设您正在采取必要的步骤确保您有两个项目,您可以简单地执行以下操作:

list.First.Next.Value

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接