A simple method by break the original list. We scan the list once and cur.next = cur to beak it,if there is a cycle we will back to a front node again for which the cur.next == cur test returns True.
BUT my solution got TLE for the simple test case [3,2,0,-4] tail points to index 1.
Anyone can find the problem?
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # @param head, a ListNode # @return a list node def detectCycle(self, head): if not head: return None if head.next == head: return head cur = head while cur: if cur.next == cur: return cur temp = cur.next cur.next = cur cur = temp return None