Skip to main content

Linked List Cycle II

Question

Given a linked list, determine if it contains a cycle and if so, find the node at which the cycle begins.

Example 1
Input: head = [3,2,0,-4], pos = 1
Output: tail connects to node index 1

Solution

all//Linked List Cycle II.py


# Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None


class Solution:
def detectCycle(self, head):
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if slow == fast:
break
else:
return None

slow = head
while slow != fast:
slow = slow.next
fast = fast.next
return slow