給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 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 ...