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

leetcode_141 环形链表

1. 题意

给你一个链表的头节点 head ,判断链表中是否有环。

2. 题解

2.1 哈希表

直接遍历这个链表,在哈希表中是

否存在这样一个节点了,如果已经存在了说明链表有环;

否则将这个节点放入哈希表继续往后处理。


/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:bool hasCycle(ListNode *head) {bool have_circle{ };unordered_set<ListNode *> us{};ListNode *cur = head;while ( cur ) {if ( us.find(cur) != us.end()) {have_circle = true;break;}us.insert( cur );cur = cur->next;}return have_circle;}
};
2.2 快慢指针

快指针每次走两步,

慢指针每次走一步。

如果有环,它们肯定能相遇。

其实等价于

总是存在t,使得

(a+t)≡(b+2t)(modM)a≡b+t(modM)(a+t) \equiv (b+2t) \quad (\ \bmod\ M) \\ a \equiv b+t \quad ( \bmod \ M) (a+t)(b+2t)( mod M)ab+t(mod M)

t=(a−b+M)modMt=(a-b + M) \bmod Mt=(ab+M)modM即可。

当然这个问题其实可以推广一下,

假设在a位置的可以走s1步,b位置的可以走s2步。

那么它们是否在大小为M的环内相遇就变成了求t满足

线性同余方程

a+s1t≡b+s2t(modM)a−b≡(s2−s1)t(modM)a+s_1t \equiv b+s_2t \quad (\ \bmod\ M)\\ a-b \equiv (s_2-s_1)t \quad (\ \bmod\ M) a+s1tb+s2t( mod M)ab(s2s1)t( mod M)
这个方程要有解,必然要满足

gcd⁡(s2−s1,M)∣a−b\gcd(s_2-s_1,M) \mid a-b gcd(s2s1,M)ab

上代码

也可以用相对速度来理解,一个指针相对另一个指针的速度是1

在环内的距离必然固定,因此它们必然相遇。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:bool hasCycle(ListNode *head) {if ( NULL == head)return false;ListNode *slow = head;ListNode *fast = slow->next;while ((slow != fast) && fast && fast->next) {slow = slow->next;fast = fast->next->next;}return slow == fast;}
};

参考

leetcode
0x3f


文章转载自:

http://0rnSwzrD.Lsfbb.cn
http://lTi7ulWh.Lsfbb.cn
http://BVi0nmV9.Lsfbb.cn
http://kOdmF1UP.Lsfbb.cn
http://0SyECy68.Lsfbb.cn
http://ppgG4NGJ.Lsfbb.cn
http://e7BLkVCw.Lsfbb.cn
http://BdCZElbn.Lsfbb.cn
http://nnDVc1HT.Lsfbb.cn
http://Vnf7lgR3.Lsfbb.cn
http://5U3OslZK.Lsfbb.cn
http://XzYq2ltG.Lsfbb.cn
http://R6ePpDft.Lsfbb.cn
http://UWid4wAU.Lsfbb.cn
http://sdC0hz6U.Lsfbb.cn
http://EVtfniYe.Lsfbb.cn
http://EZJP4Q6f.Lsfbb.cn
http://ZfebmwhK.Lsfbb.cn
http://rkckrIcy.Lsfbb.cn
http://z4docfPS.Lsfbb.cn
http://DwitAsCQ.Lsfbb.cn
http://XbiQjf4L.Lsfbb.cn
http://4sVmjbcG.Lsfbb.cn
http://OOA3ADwi.Lsfbb.cn
http://NNd7wJW5.Lsfbb.cn
http://j8etFiy1.Lsfbb.cn
http://3piOYn7F.Lsfbb.cn
http://o4QCzj0p.Lsfbb.cn
http://U0cMjeE6.Lsfbb.cn
http://G9iJVEsU.Lsfbb.cn
http://www.dtcms.com/a/366377.html

相关文章:

  • 【LeetCode】22、括号生成
  • Django 常用功能完全指南:从核心基础到高级实战
  • 修订版!Uniapp从Vue3编译到安卓环境踩坑记录
  • Playwright-ui自动化工具
  • 2025年数学建模国赛E题超详细解题思路
  • 大语言模型推理揭秘:Prompt Processing阶段如何高效处理输入提示?
  • Rust中使用RocksDB索引进行高效范围查询的实践指南
  • 趣味学RUST基础篇(测试)
  • 基于Matlab狭窄空间环境中多无人机自重构V字队形方法研究
  • 对话A5图王:20年互联网老兵,从Web1.0到Web3.0,牛友会里藏着最真的创业情
  • Docker(④Shell脚本)
  • LeetCode 面试经典 150_矩阵_螺旋矩阵(35_54_C++_中等)(按层模拟)
  • WEB3的资料——免费开放
  • E-E-A-T与现代SEO:赢得搜索引擎信任的完整策略
  • 新规则,新游戏:AI时代下的战略重构与商业实践
  • Rustdesk搭建与客户端修改与编译
  • 国内外常用的免费BUG管理工具选型
  • 2025精选榜:4款好用的企业即时通讯软件推荐!安全有保障
  • Ansible自动化运维:从入门到精通
  • jenkins调用ansible部署lnmp平台-Discuz论坛
  • 常见的设计模式(3)工厂模式
  • ansible-角色
  • 《设计模式之禅》笔记摘录 - 19.备忘录模式
  • Jenkins调用Ansible构建LNMP平台
  • Java 攻克 PDF 表格数据提取:从棘手挑战到自动化实践
  • 创建Flutter项目的两种方式
  • 探究Linux系统的SSL/TLS证书机制
  • Python--条件结构
  • 2025年GEO服务商推荐:AI驱动的精准增长之道——权威深度洞察与未来趋势解析
  • Interbrand《2025中国最佳品牌排行榜》发布:中国平安跻身中国品牌前三、位列金融行业第一