142 環形鍊錶 II 287 尋找重複數

2021-10-06 12:42:35 字數 924 閱讀 8815

142. 環形鍊錶 ii

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

快慢指標走到相等,然後再從頭節點,慢節點一起走,一直走到相交的地方

class solution:

def detectcycle(self, head: listnode) -> listnode:

slow,fast = head,head

while fast and fast.next:

fast = fast.next.next

slow = slow.next

if fast==slow:

p=head

while p!=slow:

p=p.next

slow=slow.next

return slow

return

287. 尋找重複數

給定乙個包含 n + 1 個整數的陣列 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在乙個重複的整數。假設只有乙個重複的整數,找出這個重複的數。

把陣列轉換成上面的有環鏈表來求,肯定有環

class solution:

def findduplicate(self, nums: list[int]) -> int:

slow,fast = nums[0],nums[nums[0]]

while slow!=fast:

slow = nums[slow]

fast = nums[nums[fast]]

p = 0

while slow != p:

slow = nums[slow]

p = nums[p]

return slow

142 環形鍊錶 II

還是快慢指標的問題,當發現有環時,將fast指向head,fast一次向前移動乙個節點,則fast和slow一定會在環的入口相遇.證明 設s為slow指標走的節點個數,m為環的入口距head的位置 則第一次相遇時,fast和head相對於環入口的位置相同,fast在環中的相對於環入口的位置在 2s ...

142 環形鍊錶 II

給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.struct listnode class solution node set.insert...

142 環形鍊錶 II

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