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

141. 环形链表

题目要求

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

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

如果链表中存在环,则返回true。 否则,返回false

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 链表中节点的数目范围是[0, 104]
  • -105 <= Node.val <= 105
  • pos-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) { unordered_set<ListNode*>seen; //遍历链表 while(head!=NULL) { //如果找到了重复节点,则有环 if(seen.find(head)!=seen.end()) { return true; } else { seen.insert(head); head=head->next; } } return false; } };

详细解释

第 1 行:创建 “门牌号登记本”

unordered_set<ListNode*>seen;

翻译:准备一本叫seen的登记本,这本本子只记小房子的门牌号,而且同一个门牌号只能记一次(重复记会被拒绝),查起来还特别快。
类比:您出门逛小区,带了一本空白的登记本,专门记走过的房子门牌号,防止绕圈。
第 2 行:开始 “逛小区” 的循环

while(head!=NULL)


while:只要满足条件,就一直重复做后面的事(循环);
head!=NULL:条件是 “当前要逛的房子门牌号不是空的”(还有房子可逛);
翻译:从第一个房子(head)开始,只要脚下还有路(能找到下一个房子),就一直逛。
类比:您从小区第一个房子出发,只要还能看到下一个房子的门牌号,就继续走。
第 3-8 行:检查当前房子是不是 “逛过了”(核心判断)

if(seen.find(head)!=seen.end()) { return true; }


if:做一个判断,满足条件就执行大括号里的事;
seen.find(head):拿着当前房子的门牌号(head),翻seen登记本找这个号;
!=seen.end():“不等于登记本的封底”—— 意思是 “找到了这个门牌号”(end()是 “没找到” 的标记,不是本子末尾);

return true;:找到重复门牌号了,说明绕圈了(有环),直接告诉外面 “有环!” 并结束函数。
类比:您走到一个房子门口,翻登记本一看,这个门牌号之前记过→说明您绕回老地方了,喊一声 “小区绕圈啦!” 就回家。
第 9-13 行:没逛过就 “登记门牌号,继续逛”

else { seen.insert(head); head=head->next; }


else:如果上面的判断不成立(没找到重复门牌号),就做这些事;
seen.insert(head):把当前房子的门牌号写进登记本;
head=head->next;:取下一个房子的门牌号(当前房子门口贴的next),准备逛下一个。
类比:您看登记本,这个门牌号没记过→把它写进本子,然后按门口贴的下一个门牌号,走到下一个房子。
第 14 行:逛完所有房子,没绕圈

return false;


翻译:能走出上面的while循环,说明head==NULL(走到了小区尽头,没有下一个房子了),而且全程没找到重复门牌号→链表没环,告诉外面 “没绕圈!”。
类比:您把小区所有房子都逛完了,走到了路的尽头,登记本里也没有重复的门牌号→小区是直的,没有绕圈的路

http://www.jsqmd.com/news/325898/

相关文章:

  • 【开题答辩全过程】以 基于web美食餐饮系统设计与实现为例,包含答辩的问题和答案
  • Prompt 模板库详解
  • 跨话语重评分实现更具包容性的语音识别
  • 开关磁阻电机控制仿真:Matlab 2016b的探索之旅
  • AI Coding Pattern 详解
  • RAG 是什么
  • 分布式共识:区块链 / Web3 的底层基石(域名投资赛道专属解析)
  • 2026安全健康提神抗疲劳长牛健购买指南,合肥地区推荐靠谱商家
  • 2026年值得关注的新中式家具靠谱生产商,价格怎样
  • 大模型榜单周报(2026/01/31)
  • 2025年市面上有实力的尘埃粒子检测仪工厂电话,台式粒子计数器/尘埃粒子测试仪公司哪家强
  • Chandra OCR效果惊艳:多页PDF自动分节,章节标题识别与Markdown锚点生成
  • 分析光纤收发器源头厂家,哪家品牌靠谱且价格有优势呢?
  • 2025年市面上热门的中型货架品牌怎么选,层板货架/平台货架/重型货架/穿梭式货架/库房货架,中型货架制造商推荐
  • 探讨工程净化生产企业哪家费用低,靠谱选择别错过
  • 为什么verl更适合生产环境?三大优势解析
  • 2026年柠檬酸钠制造企业排名,出货快的柠檬酸钠厂家哪家好
  • 2025年丝印机选购必看:本地口碑爆棚的产品推荐,丝印机口碑推荐优选实力品牌
  • 盘点上海工业扫码枪工程案例多的品牌,这些制造商值得关注
  • 当AI测出我的职业焦虑症:软件测试者的破局三法则
  • 极地计算测试实战:跨越温差的可靠性挑战
  • 深度解析:智能体系统成熟后,组织面临的隐蔽风险——“创新高原期”
  • Scaling Laws:《Scaling Laws for Neural Language Models》Figure 3 解读
  • OrCAD快速入门:图解说明主菜单与工具栏功能
  • 吐血推荐专科生必备!9款一键生成论文工具TOP9测评
  • 普通型光纤收发器国内厂家排名情况如何,哪家产品更靠谱
  • 互联网大厂Java求职面试实战:Spring Boot微服务与Kafka消息队列应用解析
  • 为什么脑波疲劳监测成为开发团队的必备工具?
  • 计算机毕业设计springboot考研社区网站 SpringBoot驱动的考研互助交流平台设计与实现 基于SpringBoot的考研信息共享与二手交易网站开发
  • 【开题答辩全过程】以 基于安卓的空巢老人服务平台的开发为例,包含答辩的问题和答案