思路:快慢指针或者用哈希表。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
'''
# 快慢指针
fast=slow=head
has_cycle=False
while fast!=None and fast.next!=None:
fast=fast.next.next
slow=slow.next
if fast==slow:
has_cycle=True
break
if has_cycle==False:
return None
else:
# slow再走一圈
p=slow.next
cycle=[id(slow)]
while p!=slow:
cycle.append(id(p))
p=p.next
c=head
i=0
while True:
if id(c) in cycle:
break
else:
i+=1
c=c.next
return i
'''
# 哈希表
if not head:
return None
A=[]
dict={}
while head:
A.append(head)
if head in dict:
dict[head]+=1
return head
else:
dict[head]=1
head=head.next
return None