0141 Linked List Cycle
Solved at: 2022-10-23
Question
Given head
, the head of a linked list, determine if the linked list has a cycle.
There is a cycle in a linked list if some node in the list can be reached again by continuously following the next
pointer. Internally, pos
is used to denote the index of the node that the tail's next
pointer is connected to. Note that pos
is not passed as a parameter.
Return true
if there is a cycle in the linked list. Otherwise, return false
.
Solution
class Solution:
def hasCycle(self, head: Optional[ListNode]) -> bool:
seen = {}
while True:
if head == None:
break
if head not in seen:
seen[head] = True
else:
return True
head = head.next
return False
Results
Runtime
- 141 ms, faster than 9.68% of Python3 online submissions for the Linked List Cycle.
Memory Usage
- 17.9 MB, less than 10.44% of Python3 online submissions for the Linked List Cycle.
Improved
- Floyd Cycle Finding Algorithm
- Bloom Filter?
class Solution:
def hasCycle(self, head: Optional[ListNode]) -> bool:
slow = head
fast = head
while fast != None and fast.next != None:
slow = slow.next
fast = fast.next.next
if slow == fast:
return True
return False
Results
Runtime
- 137 ms, faster than 12.14% of Python3 online submissions for the Linked List Cycle.
Memory Usage
- 17.6 MB, less than 67.24% of Python3 online submissions for the Linked List Cycle.
Complexity Analysis
- Time:
- Space: