# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = NoneclassSolution:defhasCycle(self, head: Optional[ListNode])->bool:ifnot head ornot head.next:returnFalse
seen =set()while head:if head in seen:returnTrue
seen.add(head)
head = head.nextreturnFalse
快慢指针 时间复杂度O(N)
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = NoneclassSolution:defhasCycle(self, head: Optional[ListNode])->bool:ifnot head ornot head.next:returnFalse# 从不同起点出发
slow, fast = head, head.nextwhile slow != fast:ifnot fast ornot fast.next:returnFalse
slow = slow.next
fast = fast.next.nextreturnTrue
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = NoneclassSolution:defhasCycle(self, head: Optional[ListNode])->bool:ifnot head ornot head.next:returnFalse# 相同起点出发
slow, fast = head, head
whileTrue:ifnot fast ornot fast.next:returnFalse
slow = slow.next
fast = fast.next.nextif slow == fast:returnTruereturnFalse