news 2026/6/9 20:52:18

day134—快慢指针—环形链表(LeetCode-141)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day134—快慢指针—环形链表(LeetCode-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或者链表中的一个有效索引

解决方案:

这段代码的核心功能是判断单链表中是否存在环形结构(即链表的某个节点的next指向链表中之前的节点,形成闭环),采用「快慢指针(龟兔赛跑)」的经典方法实现,时间复杂度O(n)、空间复杂度O(1),是判断链表环的最优解法。

核心逻辑

代码利用快慢指针的运动特性:若链表无环,快指针会先走到末尾;若有环,快慢指针最终会在环内相遇:

  1. 边界预判:先判断链表为空或只有一个节点,直接返回false(不可能有环);
  2. 指针初始化:慢指针low和快指针fast都从链表头节点head出发;
  3. 快慢遍历与相遇判断:循环条件为fast不为空且fast->next不为空(保证快指针能走两步):
    • 慢指针low每次走 1 步,快指针fast每次走 2 步;
    • 若某一时刻fast == low(快慢指针相遇),说明链表有环,立即返回true
  4. 无环返回:若循环结束(快指针走到链表末尾),说明链表无环,返回false

总结

  1. 核心思路:利用快慢指针步长差(1:2),无环则快指针先到终点,有环则快慢指针必在环内相遇;
  2. 关键细节:循环条件fast && fast->next避免快指针访问空指针的next导致崩溃;
  3. 效率优势:无需额外空间(如哈希表)存储节点,仅用两个指针完成判断,空间复杂度为O(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(head==nullptr || head->next==nullptr){ return false; } ListNode* low=head; ListNode* fast=head; while(fast && fast->next){ low=low->next; fast=fast->next->next; if(fast==low) return true; } return false; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 19:52:03

全网最全本科生AI论文平台TOP9:毕业论文写作必备测评

全网最全本科生AI论文平台TOP9&#xff1a;毕业论文写作必备测评 2026年本科生AI论文平台测评&#xff1a;为何需要这份权威榜单&#xff1f; 随着人工智能技术在学术领域的不断渗透&#xff0c;越来越多的本科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳…

作者头像 李华
网站建设 2026/6/9 19:46:11

Postman接口测试极速入门指南

一、2026年Postman核心功能升级功能模块新特性测试效率增益智能填充AI自动补全URL/Headers40%断言生成根据历史响应自动推荐断言逻辑65%多环境治理可视化环境变量血缘分析50%二、三阶速成体系&#xff08;含企业级最佳实践&#xff09;阶段1&#xff1a;智能请求构建&#xff0…

作者头像 李华
网站建设 2026/6/8 20:21:01

JAVA攻防-Shiro专题有key无利用链JRMP协议CC1链分析Transform执行链

知识点&#xff1a; 1、Java攻防-Shiro-有key无利用链&JRMP协议 2、Java攻防-Shiro-CC1链分析&Transform执行链 一、演示案例-Java攻防-Shiro-有key无利用链&JRMP协议 Shrio有key无链&#xff1a; JRMP指的是Java远程方法协议&#xff08;Java Remote Method Pro…

作者头像 李华
网站建设 2026/6/9 19:46:11

从需求分析到精准匹配:解码专业红娘的“择偶系统设计”逻辑

作为一名长期与逻辑和系统打交道的技术人&#xff0c;你是否发现&#xff1a;调试代码比处理情感问题简单得多&#xff1f;今天我们从系统设计的角度&#xff0c;聊聊专业红娘如何帮你解决这个“非线性优化问题”。一、问题定义&#xff1a;为什么择偶需求比产品需求更难厘清&a…

作者头像 李华