【leetcode】快慢指针 (in python)

快慢指针法。
定义两个指针:慢指针每次走一步快指针每次走两步。依次循环下去,如果链表存在环,那么快慢指针一定会有相等的时候。

为了便于理解,你可以想象在操场跑步的两个人,一个快一个慢,那么他们一定会相遇(无论他们的起始点是不是在操场)。

【题141】
题目描述
判断一个链表序列是否存在环。

代码

        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                return True
        return False

【题142】
判断是否有环路,如果有的话,返回环路的起点。

思路:当slow和fast相遇时,将slow的指针修改为head,fast不变,两者的步调一致。则下一次相遇的位置就是环路的起点。

代码

class Solution(object):
    def detectCycle(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head == None or head.next == None:
            return None
        faster = slow = head
        while faster and faster.next:
            faster = faster.next.next
            slow = slow.next
            if faster == slow:
                break
        if slow == faster:
            slow = head
            while slow != faster:
                slow = slow.next
                faster = faster.next
            return slow
        return None
--------------------- 
作者:风澈云间 
来源:CSDN 
原文:https://blog.csdn.net/qian2729/article/details/50599772 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_42011358/article/details/83272336