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

142 环形链表II

在这里插入图片描述
解题思路:
\qquad 之前在 环形链表I 中讲过利用快慢指针判断链表是否有环,当快慢指针相等时,链表中存在环。但环形链表II在其基础上,额外需要找到环的第一个节点,可以在快慢指针相遇的基础上,进一步分析。

\qquad 如果链表存在环,则快慢指针相遇于环上一点(如下图),将链表拆分成a, b, c三段,题目需要返回a、b段交界点的指针,由快慢指针相遇可得:

2 ( a + b ) = a + b + n ( b + c ) 2(a+b) = a + b + n(b+c) 2(a+b)=a+b+n(b+c)
a = n ( b + c ) − b a = n(b+c) - b a=n(b+c)b
a = c + ( n − 1 ) ( b + c ) a = c + (n-1)(b+c) a=c+(n1)(b+c)

\qquad 此时,如果使用两个指针分别从表头和相遇点开始移动,则这两个指针会相遇于环开始的节点,此时返回结果即可。 在这里插入图片描述

ListNode *detectCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;ListNode* pos = head;while(fast != nullptr){slow = slow->next;if(fast->next != nullptr){fast = fast->next->next;}else return nullptr;if(slow == fast){while(pos != slow){slow = slow->next;pos = pos->next;}return pos;}}return nullptr;}

http://www.mrgr.cn/news/55644.html

相关文章:

  • 测试教程分享
  • ab命令深入解析:ApacheBench性能测试工具
  • lazyLoad
  • 限制游客在wordpress某分类下阅读文章的数量
  • 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 5427(unattended-upgr)持有
  • 【Python处理JSON与JSONP返回数据】
  • Vim使用与进阶
  • 168K+ Star!AutoGPT:一个构建、部署和运行AI代理的强大平台
  • 【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数
  • 【AI学习】扩散模型学习总结PPT
  • python 爬虫 入门 四、线程,进程,协程
  • Mysql常见面试题总结
  • 深入理解Oracle闪回技术
  • JMeter快速入门示例
  • pycharm中使用ctrl+鼠标滚轮改变字体大小
  • 深入探秘ReentrantLock的实现与应用:从底层原理到业务场景的实践
  • 【LLM】大模型工具调用之AllTools模型
  • 【状态机DP】力扣1262. 可被三整除的最大和
  • 01-编程入门
  • 传感器信号的存储和传输
  • 首个统一生成和判别任务的条件生成模型框架BiGR:专注于增强生成和表示能力,可执行视觉生成、辨别、编辑等任务
  • Qt学习笔记第21到30讲
  • DataWhale10月动手实践——Bot应用开发task04学习笔记
  • MySQL 服务器配置与管理<二>
  • CAS 详解
  • Reverse.Kr—— 前四题