好久没有刷题了,缺乏一种感觉,这道题还是蛮考验数学知识的,一切尽在代码中
# -*- encoding = 'utf - 8' -*-
# 自己的方法:
# 从开始出发到相遇后,将slow = head,fast每次走一步,slow与fast再次相遇点,则为环的起点
# 下面几个延伸的问题也可以解决
# 1. 环的长度是多少?(第一次相遇后,继续走,再次相遇后,慢指针走的距离即为环的长度)
# 2. 如何找到环中第一个节点(即Linked List Cycle II)?(本题解决)
# 3. 如何将有环的链表变成单链表(解除环)?(在本体中再加一个记录前一个指针的变量)
__author__ = 'Administrator'
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
"""
slow = fast = head
while fast != None and fast.next != None:
slow = slow.next
fast = fast.next.next
if slow == fast:
break
if fast == None or fast.next == None:
return None
slow = head
while slow != fast:
slow = slow.next
fast = fast.next
return slow