蓝桥与力扣刷题(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
解释:链表中没有环。

第一种解题思路+代码:(快慢指针)

代码:

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public boolean hasCycle(ListNode head) {/**思路:1.判断链表是否为空或者单链表,是直接返回false2.声明快慢指针,遍历链表(快指针速度为一次两步,慢指针速度为一次一步)3.当快慢指针相遇时,可以判断出该链表存在环4.此时需要将一个指针重新指向链表的头节点5.快慢指针同时移动,每次各移动一步,终会在环的入口处相遇*/if(head == null || head.next == null){return false;}ListNode slowNode = head;ListNode fastNode = head;//遍历链表(快指针速度为一次两步,慢指针速度为一次一步)while(fastNode != null && fastNode.next != null){slowNode = slowNode.next;fastNode = fastNode.next.next;//快慢指针相遇时,该链表存在环if(slowNode == fastNode){//将一个指针重新指向链表的头节点slowNode = head;while(slowNode != fastNode){//快慢指针同时移动,每次各移动一步(是在判断链表存在环之后的快慢指针)slowNode = slowNode.next;fastNode = fastNode.next;}return true;}}return false;}
}

这道题在我解答之后去看了官网和一些大佬的题解,有对快慢指针来判断是否为环形链表相应的图解(作者:Caddy  题解:https://leetcode.cn/problems/linked-list-cycle/solutions/691164/yuan-lai-hui-luo-ji-qing-xi-jian-dan-yi-7o8tx/)

举例一
小汽车和自行车从跑道的起点同时出发
如果没有环道,那么小汽车永远离自行车而去
如果有环道,最终小汽车最终会追上自行车
举例二
大家初高中时候,学校操场的环形跑道上举行万米长跑,跑的快的学生经常会追上跑的慢的学生,也就是跑的快的学生第一次追上跑的慢的学生的时候,实际跑的快的学生比跑的慢的学生多跑了一圈。

第二种解题思路+代码:(哈希表)引用力扣(作者:数据结构和算法  题解:https://leetcode.cn/problems/linked-list-cycle/solutions/438358/3chong-jie-jue-fang-shi-liang-chong-ji-bai-liao-10/)在该篇题解中,作者编写多种方法来解答环形链表,除了快慢指针和哈希表,还有反转链表和链表节点逐个删除的方法,对我而言大佬的多种解法帮我扩充了知识面(大家有兴趣也可以去搜索)。

代码:

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public boolean hasCycle(ListNode head) {//链表中存在环,那么在遍历链表的过程中,某个节点会重复出现。通过将每个节点添加到哈希集合中,如果某个节点已经存在于集合中,说明链表存在环。Set<ListNode> set = new HashSet<>();while (head != null) {//如果重复出现说明有环if (set.contains(head))return true;//否则就把当前节点加入到集合中set.add(head);head = head.next;}return false;}
}

总结:解答该题所用的快慢指针法只要存在速度差,在移动n次后快慢指针也终会相遇。因此,快慢指针的速度不限定是在2倍之差。另外,在写这道题时,我也苦恼了很久,在使用快慢指针遍历链表确实能够判断出该链表是否存在环,但是如何确定链尾连接到链表中的位置,并返回相应的下标?后面我查询AI时,AI给出了相应的解释:假设链表的起点到环的入口的距离为 x,环的长度为 y。当快慢指针第一次相遇时,慢指针走了 x+y 的距离,而快指针走了 x+2y 的距离(因为快指针比慢指针多走了一圈)。当我们将一个指针重新指向链表的头节点,并让两个指针同时移动时,它们会在环的入口相遇。这是因为:从链表起点到环的入口的距离是 x。从相遇点到环的入口的距离也是 x(因为快指针在环中多走了一圈,所以它在环中走的距离是 y,而从相遇点到环的入口的距离正好是 x)

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

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

相关文章

【生成模型之十三】SmartEraser

论文&#xff1a;SmartEraser: Remove Anything from Images using Masked-Region Guidance 代码&#xff1a; https://github.com/longtaojiang/SmartEraser 类型&#xff1a;fine-tuned diffusion model 其他&#xff1a;支持简历修改面试辅导 一、背景 到目前为止&#…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测&#xff0c;到 2025 年全球 AI 安全解决方案市场规模将突破 200 亿美元&#xff0c;年复合增长率超过 30%&#xff0c;而…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (上)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来&#xff0c;生成式 AI 安全市场正迅速发展。据 IDC 预测&#xff0c;到 2025 年全球 AI 安全解决方案市场规模将突破 200 亿美元&#xff0c;年复合增长率超过 30%…

mysql运维

1、msyqlLinux通用二进制安装 1. MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/https://downloads.mysql.com/archives/community/https://downloads.mysql.com/archives/community/https://downloads.mysql…

蓝桥杯刷题DAY3:Horner 法则 前缀和+差分数组 贪心

所谓刷题&#xff0c;最重要的就是细心 &#x1f4cc; 题目描述 在 X 进制 中&#xff0c;每一数位的进制不固定。例如&#xff1a; 最低位 采用 2 进制&#xff0c;第二位 采用 10 进制&#xff0c;第三位 采用 8 进制&#xff0c; 则 X 进制数 321 的十进制值为&#xff…

使用VCS对Verilog/System Verilog进行单步调试的步骤

Verilog单步调试&#xff1a; System Verilog进行单步调试的步骤如下&#xff1a; 1. 编译设计 使用-debug_all或-debug_pp选项编译设计&#xff0c;生成调试信息。 我的4个文件&#xff1a; 1.led.v module led(input clk,input rst_n,output reg led );reg [7:0] cnt;alwa…

【单层神经网络】softmax回归的从零开始实现(图像分类)

softmax回归 该回归分析为后续的多层感知机做铺垫 基本概念 softmax回归用于离散模型预测&#xff08;分类问题&#xff0c;含标签&#xff09; softmax运算本质上是对网络的多个输出进行了归一化&#xff0c;使结果有一个统一的判断标准&#xff0c;不必纠结为什么要这么算…

Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)

目录 1.镜像名的组成 2.镜像操作相关命令 镜像常用命令总结&#xff1a; 1. docker images 2. docker rmi 3. docker pull 4. docker push 5. docker save 6. docker load 7. docker tag 8. docker build 9. docker history 10. docker inspect 11. docker prune…

【25考研】南开软件考研复试复习重点!

一、复试内容 复试采取现场复试的方式。复试分为笔试、机试和面试三部分。三部分合计100分&#xff0c;其中笔试成绩占30%、机试成绩占30%、面试成绩占40%。 1.笔试&#xff1a;专业综合基础测试 考核方式&#xff1a;闭卷考试&#xff0c;时长为90分钟。 笔试考查内容范围…

Codeforces Round 1002 (Div. 2)(部分题解)

补题链接 A. Milya and Two Arrays 思路&#xff1a;题意还是比较好理解&#xff0c;分析的话我加了一点猜的成分&#xff0c;对a&#xff0c;b数组的种类和相加小于4就不行&#xff0c;蒋老师的乘完后小于等于2也合理。 AC代码&#xff1a; #include <bits/stdc.h> u…

84-《金银花》

金银花 金银花 &#xff0c;正名为忍冬&#xff08;学名&#xff1a;Lonicera japonica Thunb. &#xff09;。“金银花”一名出自《本草纲目》&#xff0c;由于忍冬花初开为白色&#xff0c;后转为黄色&#xff0c;因此得名金银花。药材金银花为忍冬科忍冬属植物忍冬及同属植物…

2000-2020年 儒家文化-儒学中心数据-社科数据

儒家文化-儒学中心数据&#xff08;2000-2020年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90024739 https://download.csdn.net/download/paofuluolijiang/90024739 儒家文化作为中国传统文化的核心之一&#xff0c;对中国社会的发展产生了深远…

unordered_map/set的哈希封装

【C笔记】unordered_map/set的哈希封装 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实现同样的功能需要更多…

ChatGPT提问技巧:行业热门应用提示词案例--咨询法律知识

ChatGPT除了可以协助办公&#xff0c;写作文案和生成短视频脚本外&#xff0c;和还可以做为一个法律工具&#xff0c;当用户面临一些法律知识盲点时&#xff0c;可以向ChatGPT咨询获得解答。赋予ChatGPT专家的身份&#xff0c;用户能够得到较为满意的解答。 1.咨询法律知识 举…

mysql 学习8 函数,字符串函数,数值函数,日期函数,流程函数

函数 一 字符串函数 二 数值函数 三 日期函数 四 流程函数

机器学习--1.KNN机器学习入门

1、机器学习概述 1.1、什么是机器学习 机器学习&#xff08;Machine Learning&#xff09;是人工智能&#xff08;Artificial Intelligence&#xff09;领域的一个子集&#xff0c;它主要关注如何让计算机系统通过经验学习&#xff08;数据&#xff09;并自动改进性能。机器学…

【数据结构】(4) 线性表 List

一、什么是线性表 线性表就是 n 个相同类型元素的有限序列&#xff0c;每一个元素只有一个前驱和后继&#xff08;除了第一个和最后一个元素&#xff09;。 数据结构中&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列。 二、什么是 List List 是 Java 中的线性…

go-zero学习笔记(三)

利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释&#xff0c;请使用 C/C 样式的 // 和 /* ... */…

深入浅出:频谱掩码 Spectral Masking —— 噪音消除利器

在语音处理领域&#xff0c;噪声是一个常见的敌人。无论是语音通话、语音识别&#xff0c;还是语音合成&#xff0c;噪声都会大大降低语音的质量和可理解性。为了解决这个问题&#xff0c;Spectral Masking&#xff08;频谱掩码&#xff09; 模型应运而生。它通过从带噪信号的频…