package q142 type ListNode struct { Val int Next *ListNode } func detectCycle(head *ListNode) *ListNode { p1, p2 := head, head for p1 != nil && p2 != nil { p1 = p1.Next p2 = p2.Next if p2 != nil { p2 = p2.Next } if p1 == p2 { break } } if p2 == nil { return nil } p1 = head for p1 != p2 { p1 = p1.Next p2 = p2.Next.Next } return p1 } var _ = detectCycle