環形鍊錶判斷環問題

2021-10-24 14:05:08 字數 1361 閱讀 7616

環形鍊錶查詢問題

給定乙個鍊錶,判斷鍊錶中是否有環。

如果鍊錶中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鍊錶中存在環。 為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。注意:pos 不作為引數進行傳遞,僅僅是為了標識鍊錶的實際情況。

如果鍊錶中存在環,則返回 true 。 否則,返回 false

基本思路是通過雜湊表插入指標,然後每一次插入指標頭都進行一次判斷,判斷是否已經存在相同的指標頭,即判斷是否存在環

通過c++中的庫unordered_set函式建立雜湊表,通過其中的insert函式,插入指標,並且通過count函式判斷插入的指標是否已經存在雜湊表中。其中unordered_set中的insert函式,是不會重複插入的,比如insert(3),insert(3),進行兩次插入後,實質上只插入了一次3

假想「烏龜」和「兔子」在鍊錶上移動,「兔子」跑得快,「烏龜」跑得慢。當「烏龜」和「兔子」從鍊錶上的同乙個節點開始移動時,如果該鍊錶中沒有環,那麼「兔子」將一直處於「烏龜」的前方;如果該鍊錶中有環,那麼「兔子」會先於「烏龜」進入環,並且一直在環內移動。等到「烏龜」進入環時,由於「兔子」的速度快,它一定會在某個時刻與烏龜相遇,即套了「烏龜」若干圈。

我們可以根據上述思路來解決本題。具體地,我們定義兩個指標,一快一滿。慢指標每次只移動一步,而快指標每次移動兩步。初始時,慢指標在位置 head,而快指標在位置 head.next。這樣一來,如果在移動的過程中,快指標反過來追上慢指標,就說明該鍊錶為環形鍊錶。否則快指標將到達鍊錶尾部,該煉表不為環形鍊錶。

};以上資源均來自leetcod

鍊錶判斷環問題

問題 編寫函式判斷乙個鍊錶是否含有環,如果有環要求輸出環的起始位置,然後測試結果 此題考研時候做資料結構演算法部分題目練習的時候曾經做過,不過當時沒有要求求環的起始位置,當時題目的解法是 定義兩個指標p1,p2,p1每次移動乙個位置,而p2每次移動兩個位置,這樣如果鍊錶中存在迴圈,那麼p2一定能追上...

判斷環形鍊錶

最開始想到的處理方式是整個陣列,把鍊錶元素乙個乙個放進去,直到有重複的,class solution def hascycle self,head listnode bool tgt while head head head.next if head and head.val in tgt retu...

環形鍊錶判斷

141 環形鍊錶 思路 將訪問過的放到乙個容器中,然後判斷當前訪問的節點是否已經存在容器內 141 1 放到容器中,判斷當前的節點是否在已訪問的容器內 bool hascycle listnode head return false 提交後 5 時間複雜度o n 空間複雜度o n 因為使用了額外的容...