当前位置: 首页 > article >正文

[LeetCode-Python版]142. 环形链表 II

题目

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:
在这里插入图片描述

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

在这里插入图片描述

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:
在这里插入图片描述

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

提示:

  • 链表中节点的数目范围在范围 [0, 104] 内
  • -105 <= Node.val <= 105
  • pos 的值为 -1 或者链表中的一个有效索引

我的思路

  1. 用快慢指针,如果有环的话最终slow和fast会相遇

思路不足

  • slow和fast相遇的地方并不是环的起点

题解思路

当slow和fast相遇时,情况如下:
slow走了 x+a 步
fast走了 x+a+k(a+b) 步
因为fast走两步slow走一步,所以fast走过的路程是slow的两倍,fast = 2* slow
即:2x+2a = x+a+k(a+b)
x+a = a+b+(k-1)(a+b)
x-b = (k-1)(a+b)
设k=1,则:x=b
在这里插入图片描述

参考代码

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head: return head

        fast = slow = head
        while fast and fast.next :
            fast = fast.next.next
            slow = slow.next
            if fast == slow:
                while slow != head:
                    head = head.next
                    slow = slow.next 

                return slow
        return None
        

http://www.kler.cn/a/442895.html

相关文章:

  • C# 虚方法和抽象方法的区别,重写和重载的区别,参数修饰符(ref、out、in、params)--09
  • vue3 初体验
  • 进阶——十六届蓝桥杯嵌入式熟练度练习(LED的全开,全闭,点亮指定灯,交替闪烁,PWM控制LED呼吸灯)
  • HTML5实现好看的中秋节网页源码
  • 通过ESP32和INMP441麦克风模块实现音频数据传递
  • Windows C++开发环境:VSCode + cmake + ninja + msvc (cl.exe) + msys2/bash shell
  • Springboot3.x 进阶-配置和序列化
  • Android绘图Path基于LinearGradient线性渐变,Kotlin(1)
  • 免费开源了一个图床工具 github-spring-boot-starter
  • 汽车发动机电控系统-【传感器】篇
  • 实践环境-docker安装mysql8.0.40步骤
  • elasticsearch 使用enrich processor填充数据
  • 代码随想录算法训练营第五十天 | 图 | 并查集
  • fpga系列 HDL:Quartus II PLL (Phase-Locked Loop) IP核 (Quartus II 18.0)
  • Long类型的数据在网络传输的过程中丢失精度
  • Python-基于Pygame的小游戏(滑雪大冒险)(一)
  • 社交电商新风口:短视频交友+自营商城源码运营
  • filecoin boost GraphQL API 查询
  • AI开发 - 用GPT写一个GPT应用的真实案例
  • 在 Webpack 中Plugin有什么作用?Plugin是什么?
  • 华为认证HCIA——数据传输形式,数据封装的基本概念
  • 企业为什么会需要高防IP?
  • Elasticsearch:什么是信息检索?
  • 16.初识接口2.0 C#
  • SSM 电脑配件销售系统设计及 JSP 实现策略详解
  • 代码随想录算法训练营第八天-字符串-344. 反转字符串