鏈表中可能存在循環,如何確定循環在鏈表中發生的位置。如何確定循環在鏈表中發生的位置
回答
如果有循環,它不再是鏈接列表。這是一個有向圖。該循環稱爲循環。
在圖表中查找循環的一種方法是遍歷列表,標記每個項目。如果你發現一個已經標記的項目,你已經找到了一個循環。
通過保存對節點的引用(比如列表頭部的引用)並開始遍歷列表,可以確定鏈表中是否存在循環。如果在某個時候你到達列表的末尾(一個空值),那麼就沒有循環。但是如果您碰巧再次找到之前保存的同一個節點,那麼您知道該列表是循環的。無論哪種方式,停止迭代。
例如,在Java這個方法會告訴你,如果Node
個鏈表是循環:
public boolean isCircular(Node list) {
Node current = list;
while (current != null) {
if (current.next == list)
return true;
current = current.next;
}
return false;
}
編輯:
對於一般的解決方案,在找到一個任意的環鏈接列表,閱讀關於Floyd's cycle-finding algorithm(又名「烏龜和兔子」算法)。在以前的post中有一個很好的Java實現。
雖然這並不檢測任意點之間形成的循環(例如,節點6循環回到節點4)。考慮到你無法安全地迭代它,你將不得不爲列表中的每個節點調用相同的方法。 – Numeron
@Numeron你說得對。爲此,有必要將所有訪問節點存儲在一個單獨的數據結構(例如一個集合)中,並且對於遍歷的每個節點,查看它是否已經訪問過。 –
- 1. 確定在foreach循環中的位置
- 2. getView如何確定列表中的再循環convertView的位置
- 3. 邏輯,以確定循環鏈表
- 4. Python在while循環中正確定位
- 5. 如何確定OutOfMemory在Android上發生的位置?
- 6. 鏈表不正確循環
- 7. 確定鏈表中是否存在循環的算法
- 8. 如何確定鏈表是否包含循環?
- 9. 如何確定TextKit發生軟線斷裂的位置?
- 10. 如何確定滾動事件發生的位置?
- 11. 在循環中放置completionHandler的位置?
- 12. 鏈接列表中發生無限循環
- 13. python中的循環鏈表
- 14. Python中的循環鏈表
- 15. Swift中的循環鏈表
- 16. 的Java:NPE在循環鏈表:(
- 17. SQL Server如何在發生特定條件時循環一次遊標循環
- 18. 如何更改循環中的列表位置
- 19. 如何生成在Clojure中編寫的循環中循環的循環順序
- 20. 如何確定foreach循環中的哪個列表
- 21. 在垂直位置循環
- 22. 如何在循環中檢測鼠標在datagrid上的位置?
- 23. 如何確定當前項目的位置,同時循環收集?
- 24. 如何定製imshow圖位置在for循環
- 25. 如何用循環找到鏈表的循環節點?
- 26. 如何確定UIToolbar中UIBarButtonItem的位置?
- 27. 如何在每個循環錶行上發生模糊事件
- 28. 如何確定項目在Visual Studio中鏈接特定庫的位置?
- 29. OnlinePlayer位置循環
- 30. PHP循環位置
你能發表一些代碼嗎?更仔細地解釋一下? – andersoj