给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 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