leetcode 142. 环形链表 II python

题目描述:

leetcode 142. 环形链表 II python_第1张图片

 leetcode 142. 环形链表 II python_第2张图片

题解:

参考:​​​​​​【leetcode】Python实现-141.环形链表_神不烦-CSDN博客_python 环形链表

利用快慢指针的性质:

快慢指针相遇的位置到环入口的距离=链表头到环入口的距离

1.一个快指针fast=head.next.next,每次移动两个节点。一个慢指针slow=head.next,每次移动一个节点。

2.在while循环中找到slow fast相遇位置,此时slow=fast

3.设置flag从head开始,slow和flag不断向后一个节点移动,最终slow和flag会在环入口处相遇。

class Solution(object):
    def detectCycle(self, head):
        if head == None or head.next == None or head.next.next==None:
            return None
        slow = head.next
        fast = head.next.next
        while fast and fast.next:
            if slow==fast:
                flag = head
                while flag!=slow:
                    flag = flag.next
                    slow = slow.next
                return slow
            fast = fast.next.next
            slow = slow.next
        return None

leetcode 142. 环形链表 II python_第3张图片

 

 

你可能感兴趣的:(leetcode链表,链表,leetcode,python)