29

如何获取 LinkedList 实例的第 n 个元素?是否有内置方式,或者我可能需要介绍自己的实现?例如扩展方法?

谢谢

4

4 回答 4

38

ElementAt扩展方法会做到这一点:

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

不要忘记这是一个 O(n) 操作,因为LinkedList<T>它没有提供任何更有效的按索引访问项目的方法。如果您需要定期执行此操作,则建议您不应该从使用链表开始。

于 2012-04-15T17:32:07.650 回答
6

您可以使用 ElementAt() 可枚举的扩展方法。LinkedList 本身不支持随机访问的原因是因为它对数据结构来说是一种相当低效的操作。如果您要经常这样做,您应该考虑使用更合适的数据结构。

于 2012-04-15T17:31:58.597 回答
2

您可以使用 LINQ 来执行此操作,如list.ElementAt(n)or list.Skip(n - 1).First(),但如果您发现自己对链表进行索引访问,则您可能做错了(链表不能有效地支持此操作)。也许另一种数据结构会更合适?

于 2012-04-15T17:32:15.480 回答
2

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

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

list.First.Next.Value
于 2017-02-10T07:31:13.707 回答