2012-04-15 96 views
17

如何獲取LinkedList實例的第n個元素?有沒有內置的方式,或者我可能需要介紹我自己的實現?例如一個擴展方法?如何獲得LinkedList中的第n個元素<T>?

謝謝

+1

首先,爲什麼?當然你需要一個鏈表? – alexn 2012-04-15 17:32:39

+0

我有一個InsertedSortList的例子,它在LinkedList數據結構上使用像InsertAt(int i)這樣的方法。這就是我想問的原因。 – pencilCake 2012-04-15 17:52:41

+0

它是SO還是MSDN文檔? – 2015-04-20 14:52:54

回答

27

ElementAt擴展方法將做到這一點:

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

不要忘記這是一個O(n)的操作,因爲LinkedList<T>不提供通過索引訪問的任何項目更有效的方式。如果您需要定期執行此操作,則表明您不應該使用鏈接列表開始。

+8

微軟,請在文檔中添加複雜性:) – 2014-02-15 22:09:14

+0

@Jon不會被挑剔,但是如果我執行'IList ',是否需要索引操作不能是'O(n)'? – nawfal 2014-06-02 16:33:37

+1

@nawfal:將編輯。 – 2014-06-02 16:37:24

6

您可以使用ElementAt()枚舉擴展方法。原因LinkedList不支持本地的隨機訪問是因爲它對數據結構來說是一個相當低效的操作。如果你經常這樣做,你應該考慮使用更合適的數據結構。

2

你可以使用LINQ來做到這一點,如list.ElementAt(n)list.Skip(n - 1).First(),但是如果你發現自己做鏈接列表的索引訪問,你可能做錯了事(鏈表不能有效地支持這個操作)。也許另一個數據結構會更合適?

0

我需要讓我的列表的第二個元素(更新基於第二個第一項的值)

假設你正在採取必要步驟,以確保你有兩個項目,你可以簡單地這樣做:

list.First.Next.Value 
相關問題