Leetcode # 142. Linked List Cycle II (Floyd’s Tortoise🐢 and Hare🐇)
https://leetcode.com/problems/linked-list-cycle-ii/
First Solution
Time Complexity: O(length(list))
Space Complexity: O(length(list))
(The input and output generally do not count towards the space complexity.)
class Solution:
def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
appeared_node = set()
cur = head
while(cur):
if cur in appeared_node:
return cur
appeared_node.add(cur)
cur = cur.next
return None
Better Solution: Floyd’s Tortoise🐢 and Hare🐇
Floyd’s Cycle Detection Algorithm / Tortoise and Hare Algorithm
Time Complexity: O(len(linked_list))
Space Complexity: O(1)
(The input and output generally do not count towards the space complexity.)
class Solution:
def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
# step 1
hare = tortoise = head
while hare is not None and tortoise is not None:
hare = hare.next
if hare: hare = hare.next
tortoise = tortoise.next
if hare == tortoise: break
if hare is None: return None
# step 2
tortoise = head
while hare != tortoise:
hare = hare.next
tortoise = tortoise.next
return hare
相關例題
Leetcode # 141. Linked List Cycle
Last Updated on 2023/08/16 by A1go