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

【LeetCode 算法】Linked List Cycle 环形链表

文章目录

  • Linked List Cycle 环形链表
    • 问题描述:
    • 分析
    • 代码
      • 哈希
      • 快慢指针
    • Tag

Linked List Cycle 环形链表

问题描述:

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

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

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

链表中节点的数目范围是 [ 0 , 1 0 4 ] − 1 0 5 < = N o d e . v a l < = 1 0 5 p o s 为 − 1 或者链表中的一个有效索引 链表中节点的数目范围是 [0, 10^4]\\ -10^5 <= Node.val <= 10^5\\ pos 为 -1 或者链表中的一个 有效索引 链表中节点的数目范围是[0,104]105<=Node.val<=105pos1或者链表中的一个有效索引

分析

目标就是判断链表中是否有环。

对于无环链表,依次遍历节点,最后一定是null,否则就会进入循环,之前已经访问过的节点,势必会重新访问

所以如何知道节点是否被访问过,就是需要解决的问题。

错误

有的思路是利用节点的值,进行判断,很明显这个思路有缺陷,如果整个链表都是相同的值,就明显无法进行判断。

哈希

而使用哈希表,就可以解决这个问题,它可以保证哈希表中的元素一定是唯一的,不会重复
这个原理可以自行Bing,GPT什么的。

所以遍历的过程中,每遇到一个新节点,就利用哈希表进行判断是否出现过,如果出现过,说明了节点一定重复访问了,从而说明 有环
时间复杂度 O ( N ) O(N) O(N) ,空间复杂度 O ( N ) O(N) O(N)
这个是比较常规的操作,也是大部分的思路。

升级

这个思路很典型,但是随着数据规模的增加,时空的消耗也会增加。

快慢指针

另一种是双指针,一个fast,一个slow,fast一次走2步,slow一次一步。
就像围着操场[环]跑步,fast一定会追上slow.
其实这里的双指针也叫快慢指针,该思路还可以解决链表的其他问题。

时间复杂度 O ( N ) O(N) O(N)

空间复杂度 O ( 1 ) O(1) O(1)

代码

哈希

public boolean hasCycle(ListNode head) {Set<ListNode> seen = new HashSet<ListNode>();while (head != null) {if (!seen.add(head)) {return true;}head = head.next;}return false;} 

时间复杂度 O ( N ) O(N) O(N)

空间复杂度 O ( N ) O(N) O(N)

快慢指针

public boolean hasCycle(ListNode head) {if(head==null||head.next==null) return false;ListNode vh = new ListNode(-1);vh.next = head;ListNode fast = head.next,slow = vh;while(fast!=null&&fast.next!=null){if(fast==slow) return true;fast = fast.next.next;slow = slow.next;}return false;}

时间复杂度 O ( N ) O(N) O(N)

空间复杂度 O ( 1 ) O(1) O(1)

Tag

LinkedList

Hash

Two Pointers

相关文章:

【LeetCode 算法】Linked List Cycle 环形链表

文章目录 Linked List Cycle 环形链表问题描述&#xff1a;分析代码哈希快慢指针 Tag Linked List Cycle 环形链表 问题描述&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达…...

RedHat7.9安装mysql8.0.32 ↝ 二进制方式

RedHat7.9安装mysql8.0.32 ↝ 二进制方式 一、rpm方式安装1、检查是否安装了mariadb2、下载mysqlmysql8.0.323、上传解压4、创建安装目录&#xff0c;拷贝解压后的文件至安装目录/usr/local/mysql8.0/5、创建相关目录&#xff0c;开始安装6、创建mysql组和用户7、更改安装目录归…...

数据库面试题题

题干&#xff1a; -- 子查询 CREATE TABLE emp( empno INT, ename VARCHAR(50), job VARCHAR(50), mgr INT, hiredate DATE, sal DECIMAL(7,2), comm DECIMAL(7,2), deptno INT ) ; INSE…...

瑞吉外卖项目 基于spring Boot+mybatis-plus开发 超详细笔记,有源码链接

源码地址&#xff1a;https://gitee.com/programmer-xiao-kai/reggie_tack_out 前置知识&#xff1a; Java基础知识Java Web vueSpring BootSSMMaven 软件开发流程 角色分工 项目经理:对整个项目负责&#xff0c;任务分配、把控进度产品经理:进行需求调研&#xff0c;输出需…...

Redis Cluster 在Spring中遇到的问题

Redis集群配置可能会在运行时更改。可以添加新节点&#xff0c;可以更改特定插槽的主节点。还有可能因为master宕机或网络抖动等原因&#xff0c;引起了主从切换。 无法感知集群槽位变化 SpringBoot2.x 开始默认使用的 Redis 客户端由 Jedis 变成了 Lettuce&#xff0c;但是当…...

linux远程桌面管理工具 xrdp

Xrdp 是一个微软远程桌面协议&#xff08;RDP&#xff09;的开源实现&#xff0c;它允许你通过图形界面控制远程系统。通过 RDP&#xff0c;你可以登录远程机器&#xff0c;并且创建一个真实的桌面会话&#xff0c;就像你登录本地机器一样。 如何在Ubuntu 20.04 上安装 Xrdp 服…...

硬件-8-操作系统的历史

操作系统的最强入门科普&#xff08;Unix/Linux篇&#xff09; 操作系统的发展史&#xff08;DOS/Windows篇&#xff09; Mac操作系统进化史 手机操作系统的沉浮往事&#xff08;上&#xff09; 手机操作系统的沉浮往事&#xff08;下&#xff09; 1 操作系统种类 我们天天都…...

self.register_buffer()中的值发生变化

PyTorch中定义模型时&#xff0c;有时候会遇到self.register_buffer(name, Tensor)的操作&#xff0c;该方法的作用是定义一组参数&#xff0c;该组参数的特别之处在于&#xff1a;模型训练时不会更新&#xff08;即调用 optimizer.step() 后该组参数不会变化&#xff0c;只可人…...

[Tools: Pycharm] Bug合集

1. Debug mode&#xff1a;Pycharm不显示变量值&#xff08;Unable to display frame variables&#xff09;&#xff1b;在python console中交互不输出值 选择Gevent compatible&#xff1a;File > Settings > Build, Execution, Deployment > Python Debugger >…...

【JAVASE】循环结构

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 循环 1. 循环结构1.1 while 循环1.2 bre…...

NoSQL之Redis配置使用

目录 一、关系数据库与非关系型数据库 1.1.关系型数据库的概述 1.2关系型数据库的优缺点 1.2.1优点 1.2.2缺点 1.3.非关系型数据库的概述 二.关系数据库与非关系型数据库的区别 2.1数据存储方式不同 2.2扩展方式不同 2.3对事务性的支持不同 2.4非关系型数据库产生背景 2…...

Ansible最佳实践之Playbook使用过滤器处理网络地址

写在前面 使用过滤器检查、验证和操作包含网络信息的变量理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的生命被剥夺了。当时我是个年轻人&#xff0c;但我害怕这样生活下去&#xf…...

测试常见前端bug

目录 协作 测试方法 标签&#xff1a;标签 内容/ref/ 判断 arr&&arr.length 交互 样式不生效&#xff1a;devtools查找&#xff0c;编译前的标签&#xff0c;运行时不一定存在 可交互的需要提示 hover样式 没有交互逻辑&#xff0c;就不要设置交互 无法交互…...

【Python数据分析】Python常用内置函数(一)

&#x1f389;欢迎来到Python专栏~Python常用内置函数&#xff08;一&#xff09; ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;Python学习专栏 文章作者技术和水平有限&#xff0c;如果文…...

OpenCV图像处理-图像分割-MeanShift

MeanShift 1. 基本概念2.代码示例 1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的&#xff0c;而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色&#xff0c;平滑色彩细节&#xff0c;侵蚀掉面积较小的的颜色区域&#xff0c;它以图像上任意一点P为圆心&…...

【Rust 基础篇】Rust Trait 实现:灵活的接口抽象

导言 Rust是一种以安全性和高效性著称的系统级编程语言&#xff0c;其设计哲学是在不损失性能的前提下&#xff0c;保障代码的内存安全和线程安全。为了实现这一目标&#xff0c;Rust引入了"所有权系统"、"借用检查器"等特性&#xff0c;有效地避免了常见…...

【嵌入式Linux项目】基于Linux的全志H616开发板智能家居项目(语音控制、人脸识别、安卓APP和PC端QT客户端远程操控)有视频功能展示

目录 一、功能需求 二、开发环境 1、硬件&#xff1a; 2、软件&#xff1a; 3、引脚分配&#xff1a; 三、关键点 1、设计模式之工厂模式 2、wiringPi库下的相关硬件操作函数调用 3、语音模块的串口通信 4、线程 5、摄像头的实时监控和拍照功能 6、人脸识别 四、编…...

ElasticSearch基础篇-条件查询与映射

ElasticSearch基础篇二 条件查询 GET http://10.192.193.98:9200/shopping/_search?qtitle:小米手机q:代表查询条件 响应结果 {"took": 772,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped…...

大模型部署框架 FastLLM 实现细节解析

0x0. 前言 接着 大模型部署框架 FastLLM 简要解析 这篇文章首先梳理了一下FastLLM的调用链和关键的数据结构&#xff0c;然后解析了 FastLLM 的一些实现细节和CPU/GPU后端实现采用的优化技巧。 0x1. 调用链和数据结构解析 以chatglm-6b的支持为例&#xff0c;函数入口在 htt…...

Flutter ios真机调试连接断开后应用闪退

使用ios真机调试的时候&#xff0c;能正常打开应用&#xff0c;但是当数据线断开连接的时候&#xff0c;应用就会关闭&#xff0c;重新打开就会闪退。 原因是flutter默认在开发过程中使用debug模式编译 只需要将debug选择为release 重新编译就行。...

机器学习预测细菌耐药性:从全基因组数据到公共卫生预警

1. 项目概述与核心价值抗菌药物耐药性&#xff08;AMR&#xff09;这事儿&#xff0c;现在谁提起来都头疼。它不再是实验室报告上的一个数字&#xff0c;而是直接关系到我们每个人生病了还有没有药可用的现实问题。弯曲杆菌&#xff0c;这个听起来有点拗口的名字&#xff0c;其…...

5步掌握AMD锐龙SDT调试工具:从硬件小白到调优高手的实战指南

5步掌握AMD锐龙SDT调试工具&#xff1a;从硬件小白到调优高手的实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: http…...

C#手写俄罗斯方块:WinForms+GDI+游戏循环与状态机实战

1. 为什么今天还要手写一个俄罗斯方块&#xff1f;——不是怀旧&#xff0c;是练“肌肉记忆” “经典俄罗斯方块C#开发实战项目”——看到这个标题&#xff0c;你脑子里可能立刻浮现出两个画面&#xff1a;一个是大学《C#程序设计》期末大作业的Deadline前夜&#xff0c;屏幕右…...

机器学习算子零样本超分辨率为何失败?多分辨率训练方案解析

1. 项目概述与核心问题在科学计算和科学机器学习领域&#xff0c;我们常常面临一个根本性的挑战&#xff1a;如何用离散的数据和模型去理解和预测连续世界的物理现象。无论是模拟流体湍流、预测天气变化&#xff0c;还是设计新材料&#xff0c;其背后的物理规律通常由偏微分方程…...

LVGL事件处理实战:从按钮点击到复杂手势,手把手教你写响应式UI回调

LVGL事件处理实战&#xff1a;从按钮点击到复杂手势&#xff0c;手把手教你写响应式UI回调 在嵌入式系统开发中&#xff0c;用户界面的交互体验往往决定了产品的成败。LVGL作为轻量级通用图形库&#xff0c;其事件处理机制是构建动态交互的核心。不同于简单的回调函数绑定&…...

终极指南:如何用罗技鼠标宏实现PUBG完美压枪控制

终极指南&#xff1a;如何用罗技鼠标宏实现PUBG完美压枪控制 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为《绝地求生》中难以驾驭的武器…...

Houdini RBD破碎资产导入UE5全流程:从ABC/FBX导出到材质动画还原(避坑指南)

Houdini RBD破碎资产导入UE5全流程&#xff1a;从ABC/FBX导出到材质动画还原&#xff08;避坑指南&#xff09;在影视级实时渲染领域&#xff0c;Houdini与Unreal Engine 5的协同工作已成为特效制作的黄金标准。当您完成了一个令人惊叹的RBD破碎模拟后&#xff0c;如何将这些充…...

别再死记硬背了!用这5个Unity粒子特效案例,彻底搞懂ParticleSystem核心参数

别再死记硬背了&#xff01;用这5个Unity粒子特效案例&#xff0c;彻底搞懂ParticleSystem核心参数粒子特效是游戏开发中不可或缺的视觉元素&#xff0c;从角色技能到环境氛围&#xff0c;都离不开ParticleSystem的灵活运用。但很多开发者在学习过程中陷入了一个误区——试图通…...

AI赋能引力波数据分析:WCD深度学习框架从噪声中探测暗物质信号

1. 项目概述&#xff1a;当引力波遇见AI&#xff0c;如何从噪声中“看见”暗物质&#xff1f;在引力波天文学这个前沿领域&#xff0c;我们正面临一个激动人心又充满挑战的时代。自从LIGO首次直接探测到引力波以来&#xff0c;我们不仅“听”到了黑洞并合的宇宙巨响&#xff0c…...

Pico手柄+XRI 2.5交互系统实战:射线点击与抓取避坑指南

1. 这不是“拖拽组件就能跑通”的Demo&#xff0c;而是真正在Pico设备上能稳定抓取杯子、推开箱子、精准点击UI的交互系统Unity XR Interaction Toolkit&#xff08;简称XRI&#xff09;这两年在XR开发圈里热度很高&#xff0c;但很多人一上手就卡在“手柄动了&#xff0c;但啥…...