[英]Find the last node of a circular linked list whose size is unknown and the last node points to any other node except first node of the linked list
如何查找圓形鏈表的最后一個節點,其大小我不知道,最后一個節點指向除鏈表的第一個節點以外的任何其他節點?
可用於此的一種算法是Floyd循環算法。
另外,請看這個問題。
根據定義,如果節點未指向循環鏈表的第一個節點,
它不是最后一個節點。
你能在這里詳細說明嗎?
一個奇怪的清單......為什么你需要這樣的東西? 但無論如何...
您可以簡單地遍歷所有節點,並在下一個節點成為您已訪問過的節點時立即停止。 然后,當前節點將是您的答案。
您需要一些方法來跟蹤已訪問的節點。 為每個節點添加布爾標志,或使用某種具有快速插入和查找的設置數據類型(例如哈希集)。
也許添加參數到列表的節點,告訴你你是否在結束? 我想,這不會有問題。
否則,您可以記住已經訪問過的節點。 當訪問了下一個節點時,您就在最后。
Floyd循環算法不會給出列表的最后一個元素。 它只會告訴你是否有一個循環。
最后一個的定義是,在從第一個開始的順序掃描中遍歷列表時,之前的所有元素和最后一個元素之前都沒有被看到(指針值)。 最后一個將是在此順序掃描中已經看到的第一個元素。
一個簡單的解決方案是標記訪問過的元素,以便輕松檢測已經看到的元素。 該標志可以是侵入性的,即通過改變元素中的位,或者通過使用散列表來存儲指針值。
由於我們需要能夠測試元素是否已被訪問過,所以我沒有看到另一種解決方案。
我可以詳細說明如何使用Floyd的算法來解決這個問題,但我不明白一步的解釋
我不完全理解為什么第4步是真的,但我有一位朋友向我解釋解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.