zoukankan      html  css  js  c++  java
  • LeetCode 142 环形链表 II python

    题目描述

    给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

    说明:不允许修改给定的链表。

    样例

    如果不是环,则输出None
    如果是环,则输出入口节点
    

    想法:
    通过ac141,知道慢节点循环的次数就是环的长度
    无环的情况不用考虑,直接返回None即可
    有环分为下面两种可能
    第一种情况
    这种情况就是链表正好构成一个环
    第二种情况
    第二种情况就是链表中存在环,由上图可知快节点走过的路径是a,b,c,d,b,c;慢节点走过的路径是a,b,c
    又因为快节点速度是慢节点的两倍,所以可知

    a+b+c+d+b+c = 2a+2b+2c
    d+b+c = a+b+c
    d(相遇点距环入口的距离) = a(头节点距环入口的距离)
    

    再看第一种情况,可以知道,快节点是慢节点的多少倍,快节点就通过多少圈与慢节点相遇。
    所以就根据相遇点距环入口的距离等于头节点距环入口的距离

    class Solution(object):
        def detectCycle(self, head):
            """
            :type head: ListNode
            :rtype: ListNode
            """
            if head is None:
                return None
            if head.next is None:
                return None
            first = second = head
            while second.next and second.next.next:
                first = first.next
                second = second.next.next
                if first == second:
                    p = head
                    while first != p:
                        p = p.next
                        first = first.next
                    return p
            return None
    

    最后

    刷过的LeetCode源码放在Github上了,希望喜欢或者觉得有用的朋友点个star或者follow。
    有任何问题可以在下面评论或者通过私信或联系方式找我。
    联系方式
    QQ:791034063
    Wechat:liuyuhang791034063
    CSDN:https://blog.csdn.net/Sun_White_Boy
    Github:https://github.com/liuyuhang791034063

  • 相关阅读:
    用EnumDisplaySettings获取显示设置信息
    关于同一线程中临界区编程的
    HGE初始化状态设置
    Delphi 在ListView中添加一个进度条
    WM_NCCALCSIZE消息处理详解
    Delphi操作系统菜单
    C语言I博客作业03
    C语言I博客作业05
    大一第一周作业
    C语言I博客作业02
  • 原文地址:https://www.cnblogs.com/GF66/p/9785469.html
Copyright © 2011-2022 走看看