Leetcode 環形鍊錶 II

2021-10-22 18:35:07 字數 1160 閱讀 3707

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。

雜湊表

使用雜湊表來儲存所有已經訪問過的節點。每次到達乙個節點,如果該節點已經存在於雜湊表中,則說明該鍊錶是環形鍊錶,否則就將該節點加入雜湊表中。重複這一過程,直到遍歷完整個鍊錶即可。

listnode *

detectcycle

(listnode *head)

iscycle.

insert

(head)

; head = head->next;

}return

null

;}

雙指標問題設定兩個快慢指標(fast slow),一開始都指向指標頭部o,q是兩指標相遇的位置,兩指標相遇時,快指標已經超慢指標n圈.

這裡為何慢指標第一圈走不完一定會和快指標相遇?

由:a+n*(b+c)+b = 2(a+b)

a = (n-1)(b+c)+c

兩指標從相遇點q到入環點p的距離加上n-1 圈的環長 等於 從鍊錶頭部o到入環點p的距離

因此,當發現兩指標相遇時,再額外使用乙個指標curr, 起始它指向鍊錶頭部;隨後它和slow指標每次向後移動乙個位置。最終,它們會在入環點相遇。

listnode *

detectcycle

(listnode *head)

return curr;}}

return

null

;}

環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 輸出...

環形鍊錶II

1.問題描述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。為了表示給定鍊錶中的環,我們使用整數pos來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果pos是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 ...

環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。definition for singly linked ...