Try   HackMD

141. Linked List Cycle

Difficulty: Easy

link: https://leetcode.com/problems/linked-list-cycle/

1. Hash table

O(n)
runtime,
O(n)
space

用set紀錄看過的node,如果有重複就代表有cycle。

python
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: visit = set() while head is not None: if head in visit: return True visit.add(head) head = head.next return False

2. Two Pointers

O(n)
runtime,
O(1)
space

Floyd Cycle Detection Algorithm (龜兔賽跑演算法),用一快一慢的兩個指標,如果快的指標會追到慢的指標,就代表有cycle。

python
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: slow = fast = head while fast is not None and fast.next is not None: slow = slow.next fast = fast.next.next if slow is fast: return True return False
tags: leetcode