2013-10-16 47 views
2

我環顧四周,我無法真正找到我能理解的答案,或者它不適用於我。我有這個類:如何迭代鏈接列表

class Node 
{ 
    public int value; 
    public Node next; 
} 

而且我有一個名爲head一個成員變量是單鏈表的頭。現在我試圖遍歷鏈表的不同節點來搜索特定的value。我知道如果我手動做,那麼我會做head.next.next.next.next.value,如果我想第五節點的value。這將很快成爲一個非常大的鏈表的單調乏味,所以我的問題是如何創建一些循環來遍歷這個,這樣我可以檢查鏈接列表中每個節點的value變量?

回答

4

做你通過你的類迭代的方式如下:當while循環完成

var currentNode = head; 
while ((currentNode != null) && (currentNode.Value != desiredValue)) 
    currentNode = currentNode.next; 

,currentNode會null或包含具有所需值的節點。

+0

只是因爲你發佈速度更快:)每個人都有我正在尋找的答案,但是你的答案稍微更詳細一些,因爲它還包含我在問題中提到的desiredValue。 –

1

對於這種類型的列表,通常保留對當前節點的引用(以頭爲開始),並且在每次迭代後,將該引用的值更改爲next節點。當currentNode變爲null時,您已到達列表的末尾,因爲最後一個元素沒有下一個元素。

事情是這樣的:

順便說一句,首創置業已經包含了一些有用的類這類任務:

  • List<T>,內部使用數組存儲元素,並提供隨機訪問他們
  • LinkedList<T>,它使用與您的自定義類相同的原則。

但也許你需要做它,你出於某種原因:)

+1

這可能是一些抽象的數據結構類的OP正在:)當我把它,他們不會允許我使用列表哈哈。 –

+1

@HanletEscaño是的,你可能是對的。但有時來自其他語言的人或只是學習編程並不知道BCL已經提供的所有有用的類:) – Botz3000

+0

你是對的,可能是這種情況:) –

1

試試這個基本迭代:

Node tmp = head; 
while (tmp != null) 
{ 
    //do your checking... 
    tmp = tmp.next; 
}