LeetCode:环形链表II

文章收录于LeetCode专栏
LeetCode地址


环形链表II

题目

  给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。
  为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。
  注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。
  说明:不允许修改给定的链表。
  进阶:你是否可以使用 O(1) 空间解决此题?

  示例 1:
在这里插入图片描述

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

  示例 2:

在这里插入图片描述

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

  示例 3:

在这里插入图片描述

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

哈希表

算法思路

  借助Set数据结构不能存放重复数据的特性来判断链表是否有环,且记录当前节点,从而可在找到环路之后直接返回入环第一个节点。

编码

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
class Solution{public ListNode detectCycle(ListNode head) {if(head == null){return null;}Set<ListNode> set = new HashSet<>();ListNode temp = head;while(temp != null){if(!set.add(temp)){return temp;}temp = temp.next;}return null;}
}

复杂度分析

  因为整个算法仅使用了一层循环遍历,所以其时间复杂度为O(n)。但是使用了一个HastSet辅助判断是否有重复节点,所以空间复杂度为O(1)。

快慢指针

算法思路

  我们也可以借助LeetCode 141题所讲的快慢指针来解答这个道题,首先定义一个快指针(每次走两步),再定义一个慢指针(每次走一步)。如果链表中存在环,慢指针一定会在第一轮与快指针相遇,我们假设环形链表一共有a+b个节点,其中a表示入环口之前的a个节点,b表示形成环的b个节点。
  假设快指针和慢指针第一次相遇时,快指针走了f步,慢指针走了s步:

  • 因为快指针每次走的步数是慢指针的两部,所以有f=2s;
  • 如果快指针要想在环内与慢指针相遇,那么快指针就必须得比慢指针多走n个环的长度,即n*b(b为环内节点个数);

  又假设慢指针在环内走了c步后与快指针相遇,那么这里就有:f = a + nb + c,s = a + c。结合前序条件f=2s,综合三个式子可得:

f = a + c + nb
s = a + c
f = 2s
将s = a + c 和 f = 2s代入f = a + c + nb求得
2s = s + nb => s = nb
再将s = nb代入s = a + c求得
nb = a + c => a = nb - c

  最后求得a = nb - c说明从链表起点还是走a步(即入环口),刚好等于环内一圈减去从入环口到相遇点的步数。有了这个结论之后,我们就可以在快慢指针第一次相遇时,将快指针重新指向链表头每次向前走一步,同时慢指针继续按照每次一步向前移动,当他们再次相遇的点,就是入环后的第一个节点。
在这里插入图片描述

编码

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/class Solution{public ListNode detectCycle(ListNode head){if(head == null){return null;}ListNode slow = head;ListNode fast = head;while(fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;if(slow == fast){fast = head;while(fast != slow){fast = fast.next;slow = slow.next;}return fast;}}return null;}}

复杂度分析

  因为整个算法仅使用了一层循环遍历,所以其时间复杂度为O(n),并且没有使用任何额外内存空间所以空间复杂度为O(1)。


一键三连,让我的信心像气球一样膨胀!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵&#xff0c;是我们国家的未来。然而&#xff0c;最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍&#xff0c;事态恶劣&#xff0c;引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…

使用软件分享--剪映(不需要会员版)剪映 Jianying_pro_3_2_0_8778_beta9_jianyingpro_beta(Windows)

专栏介绍&#xff1a;本专栏主要分享一些实用的软件&#xff08;Po Jie版&#xff09;&#xff1b; 声明1&#xff1a;软件不保证时效性&#xff1b;只能保证在写本文时&#xff0c;该软件是可用的&#xff1b;不保证后续时间该软件能一直正常运行&#xff1b;不保证没有bug&am…

深度学习-06-手动进行反向传播

深度学习-06-手动进行反向传播 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

【网关】工业智能网关-02

一 公司简介 保定飞凌嵌入式技术有限公司始于2006年&#xff0c;是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业&#xff0c;是国内最早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累&#xff0c;公司拥有业内一流的软硬件研发团队&#xff0c;在北京…

SuperMap GIS基础产品FAQ集锦(20240603)

一、SuperMap iDesktopX 问题1&#xff1a;请教一下&#xff0c;桌面把火星坐标系的数据投影转换为4326坐标系数据如何才能没有偏移呢&#xff1f; 11.1.1 【解决办法】可以使用iDesktopX提供的“电子地图坐标转换”插件实现对火星坐标系数据的纠偏。 问题2&#xff1a;请教…

麦肯锡:ChatGPT等生成式AI应用激增,大中华区增长最快

全球顶级咨询公司麦肯锡&#xff08;McKinsey & Company&#xff09;在官网发布了《he state of AI in early 2024:Gen AI adoption spikes and starts to generate value》&#xff0c;一份关于生成式AI应用的调查报告。 麦肯锡对多个国家/地区的1,363位管理者进行了调查…

前端表单校验完成之后,点击确认功能无反应FormInstance, FormRules

**产生原因&#xff1a;可能是在el-form 中添加的ref 前面加了“&#xff1a;”&#xff0c;也可能是ref中的值写错了** FormInstance, FormRules

海外仓平台系统选择指南:中小海外仓如何选到经济实惠的WMS系统

对于中小海外仓来说&#xff0c;选择一套性价比高、功能又比较齐全的系统还是很关键的&#xff0c;这直接关系到海外仓的运转效率和盈利能力。 今天我们就来探讨一下&#xff0c;针对中小海外仓这个群体&#xff0c;要怎么才能选到经济实惠又功能齐全的wms系统。 1、性价比—…

【Microelectronic Systems】

PART1 嵌入式系统概述与玩转mbed 1 嵌入式系统&#xff0c;微控制器&#xff0c;与ARM 1.1什么是嵌入式系统&#xff1f; 微处理器不仅仅存在于通用计算机中&#xff0c;也可以安置在一些不需要计算的设备内部&#xff0c;比如洗衣机&#xff0c;摄像机。微处理器常常可以控制…

vscode快捷键英文单词对照表

今天想改我的vscode快捷键&#xff0c;unfoldall这条跟我其他的ide都不一样&#xff0c;我得挨个记……但是ctrlshiftp一打开快捷键 点击右侧齿轮进行快捷键录制&#xff0c;但是我这次点左边进去查看了一下unfoldall当前是什么 后来看到了……这些oem_5是什么鬼&#xff1f; {…

防爆AGV叉车在现代物流行业的应用

AGV 随着机器人技术在中国的快速发展&#xff0c;国内企业开始推出区别于传统叉车的叉车AGV&#xff0c;旨在为企业降本增效&#xff0c;降低人工成本与对人的依赖&#xff1b;同时&#xff0c;也将人工从危险恶劣的环境中解放出来。随着技术的持续提升&#xff0c;叉车AGV已经…

npm run dev 同时运行vue前端项目和node后端项目

将两个项目放到一个目录下 项目拖进vscode中&#xff0c;安装包依赖&#xff0c;修改配置 npm i concurrently "dev": "concurrently \"vite --mode development\" \"nodemon app.js\"" 命令行 npm run dev 运行 没有运行成功排查 …

【第九课】空间数据基础与处理——空间参考处理

一、前言 地图图层中的所有元素都具有特定的地理位置和范围&#xff0c;这使得它们能够定 位到地球表面上相应的位置。精确定位地理要素对于制图和 GIS来说都至关 重要&#xff0c;而要正确地描述要素的位置和形状&#xff0c;需要引入一个用于定义位置的框 架———空间参考。…

数青蛙 ---- 模拟

题目链接 题目: 分析: 题目的意思是: 一次蛙鸣是一个完整的字符串"croak", 给你一个字符串, 让你求出最少的青蛙数目 示例一: 两次完整的"croak", 可以由一只青蛙完成, 所以答案为1 示例二: 第一次蛙鸣还没有结束, 又出现了"c", 说明有第二只青…

RTPS协议之Structure

目录 概览RTPS中的各实体和类RTPS实体和类的属性类型&#xff1a;RTPS Entities属性 HistoryCacheCacheChangeRTPS EntityRTPS ParticipantRTPS EndPointRTPS WriterRTPS Reader和DDS Entities的关联DDS DataWriterDDS DataReader 每个RTPS实体和DDS实体是一对一对应的。Histor…

Docker基础篇之Docker容器数据卷

文章目录 1. Docker配置容器卷配置时的一个建议2. Docker容器卷目录3. Docker容器卷案例 1. Docker配置容器卷配置时的一个建议 Docker挂载主机目录访问如果出现cannot open directory.:Permission dnied 解决方法&#xff1a;在挂载目录后加一个–privilegedtrue 如果是Cento…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号&#xff0c;它们共享一个共同的功能&#xff0c;同时包含 单个信号和多条总线。例如&#xff0c;AXI4Lite主机包含一个 单个信号的数量加上多条总线&#xff0c;这些都是制作 联系通过将这些信号和总线分组到一个接口中&#xff0c;Vivado IP积…

C语言指针用法完善篇

一&#xff0c;指针定义&#xff1a; 1&#xff0c;讲解 指针变量用来记录地址数据&#xff0c;没有记录有效地址的指针变量不可以使用。 定义一个变量A和一个指针B,此时变量A存放在内存1000区间&#xff0c;将变量A赋值给指针变量B&#xff0c;此时指针变量B所接收到的并不是…

彩光大放异彩!《智慧园区以太全光网络建设技术规程》应用案例征集活动结果公布

近日,中国建筑业协会绿色建造与智能建筑分会正式公布了《智慧园区以太全光网络建设技术规程》应用案例征集活动的结果。本次活动旨在推广和应用该规程,进一步推动智慧园区的数字化、智慧化、绿色化建设。众多优秀项目在征集活动中脱颖而出,展示了规程在实际应用中的显著成效。评…

STM32--ESP8266 WiFi模块

前言&#xff1a;此文所述模块为正点原子出版的ATK-ESP8266模块 一、特性参数 ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi&#xff08;串口-无线&#xff09;模块&#xff0c;ATK-ESP8266 板载了正点原子公司自主开发的 ATK-ESP-01 模块。 该模块是 ATK_ESP8266 的…