메인 내용으로 이동

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​

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: $O(n)$
• Space: $O(1)$