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

快慢指针巧解链表环检测(多解)

题目Leetcode141

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

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

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

示例一

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

Python解法

解法一:哈希表

class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: seen = set() while head: if head in seen: return True seen.add(head) head = head.next return False

每次遍历到一个节点时,判断该节点此前是否被访问过。

解法二:快慢指针

class Solution: def hasCycle(self, head: Optional[ListNode]) -> bool: if not head or not head.next: return False slow = head fast = head.next while slow != fast: if not fast or not fast.next: return False slow = slow.next fast = fast.next.next return True

方法二逻辑

以示例展示过程

1,带环链表演示示意图(示例链表:3→2→0→4→2)

2,分步追踪移动过程(3→2→0→4→2 环形链表逐轮演示)

第一轮:移动后:slow=2,fast=0

第二轮:移动后:slow=0,fast=2

第三轮:移动后:slow=4,fast=4

相遇终止(判定有环)

Java解法

1.哈希表

public class Solution{ public boolean hasCycle(ListNode head){ Set<ListNode> seen = new HashSet<ListNode>(); while(head != null){ boolean isAddSuccess = seen.add(head); // add失败,说明当前节点已经在集合中,链表有环 if(!isAddSuccess){ return true; } head = head.next; } return false; } }

2.快慢指针

public class Solution { public boolean hasCycle(ListNode head) { if(head == null || head.next == null){ return false; } ListNode slow = head; ListNode fast = head.next; while(slow != fast){ if(fast == null || fast.next == null){ return false; } slow = slow.next; fast = fast.next.next; } return true; } }

C++解法

1.哈希表

class Solution{ public: bool hasCycle(ListNode *head){ unordered_set<ListNode*> seen; while(head != nullptr){ if(seen.count(head)){ return true; } seen.insert(head); head = head->next; } return false; } };

2.快慢指针

class Solution { public: bool hasCycle(ListNode *head) { if (head == nullptr || head->next == nullptr) { return false; } ListNode* slow = head; ListNode* fast = head->next; while (slow != fast) { if (fast == nullptr || fast->next == nullptr) { return false; } slow = slow->next; fast = fast->next->next; } return true; } };
http://www.gsyq.cn/news/1581996.html

相关文章:

  • 2026燕麦奶口碑排行:营养师推荐清单来了
  • 红日靶场二:WebLogic CVE-2019-2725 到域控沦陷全流程
  • 桑坦德银行向全体员工开放AI工具,首季创造3500万欧元价值
  • 别再问 AMD 显卡能不能跑 AI,SGLang 加 TileLang 组合拳给你答案
  • 中小企业怎么做GEO优化?AI时代低成本长效获客指南
  • HIP 算子兼容性排查,AMD 显卡微调中那些奇怪的报错与解法
  • MateClaw v1.6.0 发布:补齐企业 Agent 工程能力,多方面升级助力生产环境
  • 多派生与多继承演示职读类StuTeech
  • AVR单片机内部温度传感器校准指南:从原理到单点/两点校准实践
  • Windows下载教程 Windows 10 保姆级安装步骤(附镜像文件)系统重装图文详解
  • GLM-5.2 vs GPT-5.5 成本实算:每天 1 万/10 万/100 万次请求的账单差距(2026)
  • 掉发和白发同时出现?高仕星维生素b的双重营养方案
  • 零代码组态开发实操:串口屏项目从数月迭代压缩至数天
  • ATtiny20 8位MCU超低功耗设计实战:从架构解析到物联网终端应用
  • 2026实战:用Gemini镜像站解决Spring Boot微服务性能瓶颈与故障排查
  • AT21CSMK100单线EEPROM开发指南:从1-Wire协议到嵌入式存储实战
  • 挖掘 Github 宝藏,盘点那些好用的 ROCm 开源项目
  • 简单好用,一键搜索全网资源!
  • windows经典漏洞之永恒之蓝
  • 专业的跨境电商合规方案哪个好
  • 基于ATA8510-EK1的Sub-GHz无线传感器网络快速开发实践
  • 1.4 面试:Function Calling(函数调用)
  • ATA5279天线驱动芯片Boost转换器与电流调节环路设计实战指南
  • LLaMA-Factory 原生支持 ROCm 是真的香,配合 HIPify 几分钟完成环境验证
  • Origin 2025 下载Origin2025安装教程——科学绘图与数据分析入门
  • Microchip嵌入式开发资源全攻略:从数据手册到社区支持的高效导航
  • Meilisearch:一个为搜索速度而生的开源引擎
  • 【2026】FreeOK官网入口,一键直达在线观看
  • 2026年GEO信源媒体发稿平台全盘点:三种模式、代表玩家与适用场景
  • 主表 + 扩展表设计模式