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

141. 环形链表

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

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

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

二、解题思路

✅ 解题思路:快慢指针(Floyd 判圈法)

核心思想:

我们设置两个指针:

  • slow:每次走一步

  • fast:每次走两步

如果链表中有环,fast 一定会在环中追上 slow,就像赛道上跑步,快的迟早会追上慢的。

如果链表没有环,fast 会先到达 nullptr(链表尾),说明链表是无环的。

三、代码

class Solution {
public:bool hasCycle(ListNode *head) {// 定义快慢指针ListNode* slow = head;ListNode* fast = head;while (fast && fast->next) {slow = slow->next;           // 慢指针走一步fast = fast->next->next;     // 快指针走两步if (slow == fast) {return true;             // 相遇,说明有环}}return false; // fast提前走到链表尾,说明无环}
};

四、复杂度分析

性质复杂度说明
时间复杂度O(n) 最坏情况下每个节点访问一次
空间复杂度O(1) 只用了两个指针

五、小结

  • ✅ 快慢指针是一种高效且空间最优的方法

  • ❌ 不推荐使用 unordered_set 去记录所有访问过的节点(虽然也能做),因为它额外用了 O(n) 空间

http://www.xdnf.cn/news/14380.html

相关文章:

  • 概率期望DP
  • 【茶社茶楼专用软件】佳易王茶社茶楼计时计费会员管理软件介绍
  • 深度解析企业风控API技术实践:构建全方位企业风险画像系统
  • 【运维系列】【ubuntu22.04】安装Docker
  • 【性能优化】启用zram
  • 个人笔记-- TCL 替换
  • WebAssembly的本质与核心价值
  • 电磁场与电磁波篇---介质媒质导体
  • C++: 类 Class 的基础用法
  • 人工智能:神经网络原理、案例与 Python 代码
  • java 设计模式_行为型_19命令模式
  • 一个应用程序或移动网站项目提供最佳UI解决方案
  • python动态重叠爱心图
  • 【Linux】KVM简单介绍
  • WebSocket深度指南:从零基础到生产级应用
  • Linux下的MySQL从DDL到DQL的基础操作
  • Leetcode 刷题记录 15 —— 二分查找
  • Elastic Search 学习笔记
  • 强化学习-UCB示例
  • Python 模块
  • 鸿蒙Next仓颉语言开发实战教程:设置页面
  • 实验绘图参考-0615版(自用)
  • 力扣第 454 场周赛
  • 「AI产业」| 《德勤:AI案例精选》
  • NJet Portal 应用门户管理介绍
  • Django构建简易视频编辑管理系统
  • Hadoop HDFS存储机制与块大小选择权衡
  • 如何面试网络信息安全岗位答疑(一)NISP管理中心
  • 2.1 Python解释器工作原理
  • [深度学习]目标检测基础