码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Leetcode 142. 环形链表 II Linked List Cycle II - Python 双指针法


    1. # Definition for singly-linked list.
    2. # class ListNode:
    3. # def __init__(self, x):
    4. # self.val = x
    5. # self.next = None
    6. class Solution:
    7. def detectCycle(self, head: ListNode) -> ListNode:
    8. fast, slow = head, head
    9. #让快慢指针一快一慢 快的追慢的 直至相遇
    10. while fast and fast.next:
    11. slow = slow.next
    12. fast = fast.next.next
    13. if slow == fast:
    14. #相遇时 用q记下此时相遇的节点位置 用p从首元节点开始跑
    15. p = head
    16. q = slow
    17. while p != q:
    18. #当二者相遇时,p和q所指的节点就是环的入口
    19. p = p.next
    20. q = q.next
    21. return p
    22. return None

    该算法由数学计算可推导出: x = (n-1)(Y+Z) + Z

    其中

    x:首元节点到环入口的节点个数;

    n:快指针在环内循环的圈数;

    Y:环入口到快慢指针相遇点之间的节点个数:

    Z:环中快慢指针相遇点到环入口之间的节点个数

    关于为什么慢指针在环内循环不到一圈就能被快指针追上:

    1.快指针肯定先于慢指针入环。

    2.当慢指针入环时,快指针可在环中任意位置。

    3.此时slow与fast之间的距离(从slow沿顺时针方向数到fast)记为i,环周长记为c。

    4.fast追上slow(沿顺时针方向追)需要c-i次跳动,即slow移动c-i次被追上。

    5.因为i>0 , 所以c-i < c  i.e. slow在一圈内就会被fast追上。

  • 相关阅读:
    基于51单片机的双机串口通信proteus仿真原理图PCB
    Adobe Acrobat 无法打开文件附件,因为您的PDF文件附件设置不允许打开本类型的文件
    redis持久化之AOF(Append Only File)
    https和http的区别和优势
    【MySQL 数据库 基础 Ⅱ】基础sql语句 Ⅱ
    vscode保存格式化自动去掉分号、逗号、双引号
    【免杀前置课——Windows编程】十三、事件与信号量——事件与互斥体区别、操纵信号量实现游戏多开访问控制(附代码)
    ChatGPT研究报告:AIGC带来新一轮范式转移
    nodejs+vue焦作旅游景点商城系统express
    点云从入门到精通技术详解100篇-基于光谱共焦系统的三维点云数据处理(下)
  • 原文地址:https://blog.csdn.net/rendalian/article/details/123129929
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号