遍历 + 记录 看节点是否重复 时间复杂度O(N)
class Solution:
def hasCycle(self, head: Optional[ListNode]) -> bool:
if not head or not head.next:
return False
seen = set()
while head:
if head in seen:
return True
seen.add(head)
head = head.next
return False
快慢指针 时间复杂度O(N)
class Solution:
def hasCycle(self, head: Optional[ListNode]) -> bool:
if not head or not head.next:
return False
slow = head
fast = head.next
while slow != fast:
if not fast or not fast.next:
return False
slow = slow.next
fast = fast.next.next
return True