給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 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
給定一個包含 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