news 2026/4/18 13:13:51

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/4/18 11:32:01

day135—快慢指针—环形链表Ⅱ(LeetCode-142)

题目描述给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部…

作者头像 李华
网站建设 2026/4/17 19:18:29

开源大模型中的Agent概念解析

你好&#xff01;这个问题问得非常好&#xff0c;因为“Agent”确实是当前AI领域&#xff0c;尤其是大模型应用中最热门、最关键的概念之一。 简单来说&#xff0c;在大模型语境下的“Agent”&#xff08;智能体&#xff09;&#xff0c;指的是一种能够理解用户指令、自主规划并…

作者头像 李华
网站建设 2026/4/18 5:35:08

LuatOS-Air脚本移植到LuatOS版本注意事项

一、lua版本不一样 LuatOS-Air使用的是lua5.1版本&#xff0c;本身不支持位移运算符。 LuatOS使用的是lua5.3版本&#xff0c;取消了module(..., package.seeall)这种形式的跨文件调用。 二、api不同 首先说明&#xff0c;core和脚本有所不同&#xff0c;用户可以理解为&am…

作者头像 李华
网站建设 2026/4/18 6:59:52

边缘智算新引擎 DPU 驱动的算力革新

2026年1月7日&#xff0c;工信部印发《工业互联网和人工智能融合赋能行动方案》&#xff0c;强化工业智能算力供给。加快工业互联网与通算中心、智算中心、超算中心融合应用&#xff0c;鼓励公共算力服务商向工业企业提供服务。引导工业企业加快边缘一体机、智能网关等设备部署…

作者头像 李华