【力扣-142. 环形链表2 ✨】Python笔记

🔗 环形链表 II:如何定位那个"职场死循环"的源头?

摘要:本文详解 LeetCode 142 题,不仅教你如何判断链表是否有环,更重点剖析了如何定位环的入口节点。通过"快慢指针相遇后重置指针"的数学推导,带你彻底掌握这一经典算法。


📚 核心知识点:龟兔赛跑的"二次觉醒"

还记得上一篇讲的"环形链表 I"吗?我们用快慢指针 (龟兔赛跑)轻松解决了"有没有环"的问题。但这道题升级了:不仅要判断有没有环,还要找出环的入口 (即图中值为 2 的节点)。

核心逻辑推导

  1. 第一阶段(找相遇点) :慢指针走一步,快指针走两步,两者在环内相遇。
  2. 第二阶段(找入口)这是最关键的一步! 相遇后,将快指针(或慢指针)重新指向链表头部,然后两个指针都改为每次走一步。
  3. 相遇即入口:当它们再次相遇时,那个节点就是环的入口。

原理揭秘(数学推导) : 假设从头节点到环入口的距离是 a,从环入口到相遇点的距离是 b,环的周长是 c

  • 慢指针走了 a + b
  • 快指针走了a+b+n(c)(n是圈数),且快指针路程是慢指针的 2 倍。
  • 由此可得:2(a+b)=a+b+n(c)->a+b=n(c)->a=n(c)−b。

📝 题目解析:LeetCode 142. 环形链表 II

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

示例 : 输入:head = [3,2,0,-4](尾节点连接到值为 2 的节点) 输出:返回节点值为 2 的节点


💻 代码实现(Python)
python 复制代码
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # 1. 初始化快慢指针,都指向头节点
        fast = head
        slow = head

        # 2. 第一阶段:寻找相遇点
        # 快指针每次走2步,慢指针每次走1步
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
            
            # 如果相遇,说明有环
            if slow == fast:
                # 3. 第二阶段:重置快指针到头部
                # 两者都改为每次走1步
                fast = head
                while fast != slow:
                    fast = fast.next
                    slow = slow.next
                # 再次相遇的节点即为环的入口
                return slow
                
        # 如果快指针走到了尽头,说明无环
        return None

🚀 总结

这道题是链表算法的经典之作。记住这个套路:快慢指针找相遇 -> 重置一个指针 -> 同速前进找入口。下次遇到类似的"找重复元素"或"找环"问题,这个思路依然适用!

相关推荐
2601_9623004730 分钟前
Python TensorFlow对比PyTorch_Python TensorFlow和PyTorch在机器学习中的差异
pytorch·python·深度学习·机器学习·tensorflow
承渊政道2 小时前
【Python编程—从入门到实践】(Python条件判断完全入门:从布尔表达式到列表中的if实战)
开发语言·python·pycharm·条件判断·布尔表达式
circuitsosk2 小时前
企业知识库 RAG 从 62% 到 91%:分块策略、混合检索与重排序的调优全记录
python·知识库问答·rag·面试项目·ai工程化·混合检索
烂蜻蜓3 小时前
Flask入门教程(二十六):Session API——用户会话状态管理
后端·python·flask
2603_965148115 小时前
家居百货蓝海:API挖掘高复购率生活小商品
大数据·服务器·人工智能·python·生活
阿童木写作8 小时前
跨境电商图片翻译工具推荐:批量图片翻译+视频字幕翻译+智能抠图
python·macos·音视频·xcode
cui_ruicheng9 小时前
LangChain 应用开发(十四):Agent 上下文与记忆机制
服务器·人工智能·python·langchain
circuitsosk9 小时前
任务规划器的三种范式对比:ReAct、Plan-and-Execute 与 Tree-of-Thought 在真实业务中的取舍
前端·javascript·python·react.js·llm·ai agent
shehuiyuelaiyuehao10 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
宸津-代码粉碎机10 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring