环形链表问题——力扣141,142

环形链表问题——力扣141,142

  • 141.判断链表是否带环
  • 142.给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL

141.判断链表是否带环

在这里插入图片描述

  1. 这道题不能用比较链表中的值来判断是否带环,因为链表中不同节点的值可以相同,我们要比较地址来判断是否带环
  2. 带环问题我们要用快慢指针来解决。让慢的指针一次走一步,快的指针一次走两步。这样如果链表中带环的话,慢指针一定会与快指针相遇。
  3. 地址相同就是相遇,说明链表带环

把带环的链表想象成这个样子
在这里插入图片描述

bool hasCycle(struct ListNode *head) {struct ListNode *fast = head;struct ListNode *slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(fast == slow){return true;}}return false;
}

142.给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL

在这里插入图片描述

这道题我们要找到他的入环点。
在这里插入图片描述

1.假设快指针fast在与慢指针slow第一次相遇时 fast只在环内多跑了一圈 (b+c)
那么在相遇点相遇时,slow跑了 a+b,fast跑了a+(b+c)+b。
又因为快指针一次走两步,慢指针一次走一步所以有:2(a+b)=a+2b+c
所以推出 a = c
所以我们相遇后只需要再定义一个指针 cur 从头节点位置开始走,slow从相遇点开始走,他们两相遇时就是链表中环的起始点

2.fast也可能在环内跑了很多圈才与slow相遇
但slow走的路程永远a+b
在这里插入图片描述
fast在环内走了很多圈后与slow相遇
在这里插入图片描述
fast走的时slow的二倍在这里插入图片描述
同时去掉b在这里插入图片描述>同时减去一个a在这里插入图片描述

所以得处结论,我们可以用cur 指向头节点,让慢指针在环内与cur同时走最终还是会在入环点相遇,返回相遇点即可

struct ListNode *detectCycle(struct ListNode *head) {struct ListNode *fast = head;struct ListNode *slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;if(fast == slow){struct ListNode *cur = head;while(1){if(cur == slow){return slow;}cur = cur->next;slow = slow->next;}}}return NULL;
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型,可以在互联网应用的数据保护。它还提供了对EJB(Enterrise JavaBeans)的全面支持,java servlet AI,JS(java server ages&#xff09…

matlab绘制二维云图,划分区域,并显示每个区域的均值

绘制成图如下: 代码如下: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%创建绘图的数据 ax0;bx1; ay0;by1; nx100; %数据的x轴点数 ny100; %数据的y轴点数 hx(bx-ax)/(nx-1); hy(by-ay)/(ny-1); Xax:hx:bx; Yay:hy:by; da…

有趣的Python-turtle

1 介绍 turtle 是 Python 中用来绘图的标准库(Python解释器在安装后import直接使用),它简单且有趣,作为 Python初学者 都可以将它作为第一个学习对象,培养程序学习的兴趣,建立编程带来的成就感&#xff0c…

网络安全-webshell绕过,hash碰撞,webshell绕过原理

目录 一、题目 1.1 1.2 1.3 1.4 1.5 二、绕过动态检测引擎的一次尝试 三、一个比赛中的webshell 四、webshell绕过的原理以及哈希碰撞 五、JSP解释流程导致的绕过(QT比赛) 5.1环境 5.2例子 一、题目 这里我们通过几道题目来给大家讲解 1.…

Springboot3 + MyBatis-Plus + MySql + Uniapp 实现商品规格选择sku(附带自设计数据库,最新保姆级教程)

Springboot3 MyBatis-Plus MySql Uniapp 实现商品规格选择sku(附带自设计数据库,最新保姆级教程) 1、效果展示2、数据库设计2.1 商品表2.2 商品价格和规格中间表2.3 商品规格表 3、后端代码3.1 model3.2 vo3.3 mapper、server、serverImp3…

前端-javaScript:jquery补充

jquery绑定事件的方式 1.直接使用事件函数 &("div").click(function(){alert(1)}) 2.用统一的on函数绑定事件 on(事件类型,事件函数) $("div").on("click",function(){alert(2)}) 事件类型以参数的类型传递 --->可以同时绑…

go webapi上传文件 部属到linux

go厉害的地方,linux服务器上无需安装任务依赖就可以运行,大赞! 一、编译 #在Goland中cmd中执行 go env -w GOARCHamd64 go env -w GOOSlinux go build main.go # 切换回来 否则无法运行 go env -w GOOSwindows go run main.go 拷贝到linux服…

C++——关联式容器(4):set和map

在接触了诸如二叉搜索树、AVL树、红黑树的树形结构之后,我们对树的结构有了大致的了解,现在引入真正的关联式容器。 首先,先明确了关联式容器的概念。我们之前所接触到的如vector、list等容器,我们知道他们实际上都是线性的数据结…

使用pe工具制作ubuntu备份系统和还原系统

使用pe工具制作ubuntu备份系统和还原系统 备份系统还原系统修复磁盘教程修复引导教程为什么使用pe工具 1,因为我个人觉得这个工具实现起来比systemback软件操作起来报错少些,而且装的快,其他系统同理 实验准备 1,一个电脑,一个pe启动U盘 备份系统 插入U盘,开机进入pe系…

[JavaEE] UDP协议

目录 再谈端口号 一、端口号的划分 二、UDP协议 三、UDP的特点 再谈端口号 一、端口号的划分 0-1023:知名端口号,端口号固定,其中包括HTTP,FTP,SSH等广为使用的应用层协议。 1024-65535:操作系统动态分…

数据结构|二叉搜索树

🍬 mooridy-CSDN博客 🍬数据结构专栏(更新中) 目录 1. ⼆叉搜索树的概念 2. ⼆叉搜索树的性能分析 3.⼆叉搜索树key和key/value key搜索场景 key/value搜索场景 4. 二叉搜索树的代码实现 4.1 ⼆叉搜索树的插⼊ 4.2 ⼆叉搜索…

java----LinkedHashMap

.由键决定:有序、不重复、无索引 .这里的有序指的是保证存储和去除的元素顺序一致 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序。 内容来自:集合进阶-09-LinkedHashMap_哔哩哔哩_bilibili

ChatGPT 在国内使用的方法

AI如今很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同等等,ChatGPT 真是无所不能~ 作为一款出色的大语言模型,ChatGPT 实现了人类般的对话交流,最主要是能根据上下文进行互动。 接下来,我将介绍 ChatGPT 在国…

hackmyvm靶场--zon

环境 攻击机kali 靶机 未知 主机探测 因为在同一个局域网内使用ARP协议探测存活主机 靶机为192.168.56.128 端口探测 常见的80和22端口 那么一定是寻找web漏洞拿shell了 后台扫描 后台扫描常用dirsearch和gobuster,有时候小字典可能不太行,可以尝试换个大点…

JAVA——数据流、序列化流

目录 一、DataOutputStream(数据输出流) 二、DataInputStream(数据输入流) 三、序列化流 1.1 ObjectOutputStream(对象字节输出流) 1.2 OutputStream(对象字节输入流) 四、补充 一、DataOutputStream(数据输出流) …

Flutter 获取手机连接的Wifi信息

测试版本 Flutter:3.7.6Dart:2.19.3 network_info_plus: 4.0.1 前言 我在做设备配网的时候,需要选择配网的WiFi。用下拉选择框展示WiFi列表。现在有个需求:默认展示的设备为手机连接的wifi。要实现这个需求只要能够获取到手机连接的wifi信息…

直接插入排序(C语言实现)

目录 1.直接插入排序介绍 2.实现思路 3.动图展示 4.代码实现 (升序) 单趟排序实现 单趟排序代码 直接插入排序函数 5.代码测试 6.时空复杂度分析 时间复杂度O(N^2) 空间复杂度O(1) 1.直接插入排序介绍 插入排序,又叫直接插入排序。…

(十七)MATLAB读取Gazebo话题信息

在仿真实验过程中,我们有时需要实时读取ROS及Gazebo话题,目前互联网上关于读取ROS的话题资料较多,读取Gazebo话题的参考资料较少,本文将以Ubuntu下固定翼仿真为例,展示如果通过MATLAB的插件GazeboPlugin读取Gazebo话题…

MoFA: 迈向AIOS

再一次向朋友们致以中秋的祝福! MoFA (Modular Framework for Agents)是一个独特的模块化AI智能体框架。MoFA以组合(Composition)的逻辑和编程(Programmable)的方法构建AI智能体。开发者通过模版的继承、编程、定制智能体&#xf…

C++:多态(协变,override,final,纯虚函数抽象类,原理)

目录 编译时多态 函数重载 模板 运行时多态 多态的实现 实现多态的条件 协变 析构函数的重写 override 关键字 final 关键字 重载、重写、隐藏对比 纯虚函数和抽象类 多态的原理 多态是什么? 多态就是有多种形态 多态有两种,分别是编译时…