链表--141.环形链表/easy C级理解

141.环形链表

  • 1、题目
  • 2、题目分析
  • 3、解题步骤
  • 4、复杂度最优解代码示例
  • 5、抽象与扩展

1、题目

给你一个链表的头节点 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
解释:链表中没有环。

 

提示:

  • 链表中节点的数目范围是 [0, 104]
  • -105 <= Node.val <= 105
  • pos-1 或者链表中的一个 有效索引

 

进阶:你能用 O(1)(即,常量)内存解决此问题吗?

Related Topics
  • 哈希表
  • 链表
  • 双指针

2、题目分析

关于快慢指针为什么能检测出环,可以这么思考。 假设存在一个环: 慢指针进入环后,快指针开始追赶慢指针,此时快指针距离慢指针为r,每一次移动,r都会缩小1,在经过r次移动后,二者就会相遇

如果存在环,如何判断环的长度呢?方法是,快慢指针相遇后继续移动,直到第二次相遇。两次相遇间的移动次数即为环的长度。
原因是快慢指针相遇后,也意味在新循环里,快指针距离慢指针的长度=环形链表长度l,此时快慢指针每移动一次,l缩小1,当l缩小为0时,快慢指针相遇。而期间移动的次数就是l的长度。

3、解题步骤

1、定义快慢指针为头结点
2、遍历链表,直到遍历到了链表尾。fast指针至少跟slow一起到链表尾,故是否有链表尾,只要判断fast指针即可
3、在快慢指针移动后再比较,排除初始都指向头结点的情况。如果有环,则链表没有尾,所以在这个判断里结束

4、复杂度最优解代码示例

    public boolean hasCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        while (fast != null && fast.next != null) {
            // 遍历链表,直到遍历到了链表尾。fast指针至少跟slow一起到链表尾,故是否有链表尾,只要判断fast指针即可
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                // 在指针移动后再比较,排除初始都指向头结点的情况。如果有环,则链表没有尾,所以在这个判断里结束
                return true;
            }
        }
        return false;
    }

5、抽象与扩展

环形链表的使用场景:
环形缓冲区:在数据处理中,环形缓冲区是一个重要的概念。环形缓冲区使用环形链表来实现,当缓冲区满时,新的数据会覆盖旧的数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何保护linux服务器远程使用的安全

服务器安全是一个非常敏感的问题&#xff0c;因服务器远程入侵导致数据丢失的安全问题频频出现&#xff0c;一旦服务器入侵就会对个人和企业造成巨大的损失。因此&#xff0c;在日常使用服务器的时候&#xff0c;我们需要采取一些安全措施来保障服务器的安全性。 目前服务器系…

基于6个IGBT的全桥电路simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 三相逆变器全桥电路原理 4.2 全桥电路应用领域 5.完整工程文件 1.课题概述 基于6个IGBT的全桥电路simulink建模与仿真. 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a 02_018m …

MySQL 从零开始:04 增删改查

文章目录 1、准备工作2、insert 增加数据2.1 添加所有列的数据2.2 添加部分列2.3 一次插入多条数据 3、delete 删除记录4、update 更新记录5、select 查询记录5.1 查询所有行所有列5.2 查询指定行的所有列5.3 查询所有行的指定列5.4 查询指定行的指定列 在上一小节中介绍了 MyS…

STM32-05-STM32_SYSTEM文件夹

文章目录 STM32 SYSTEM文件夹介绍1. delay文件夹2. sys文件夹 STM32 SYSTEM文件夹介绍 1. delay文件夹 delay文件夹中的文件delay.c和delay.h用来实现系统的延时功能&#xff0c;其包括7个函数&#xff1a; //仅在操作系统的支持下使用 void delay_osschedlock(void); void d…

2024年Google Ads新手指南——广告运作与类型、工具

谷歌广告投放是出海企业的必备运营动作&#xff0c;但你需要先了解他的运作逻辑、广告类型、投放必备的工具类型&#xff0c;之后可以为你的投放的高速转化做好万全准备&#xff0c;毕竟每一分钱都要花在刀刃上&#xff01;废话不多说&#xff0c;下面开始为新手准备了基础指南…

【数据库】MySQL锁

一、锁的基本概念 1、锁的定义 锁是协调多个进程或线程并发访问数据库资源的一种机制。 MySQL中的锁是在服务器层或者存储引擎层实现的&#xff0c;保证了数据访问的一致性与有效性。但加锁是消耗资源的&#xff0c;锁的各种操作&#xff0c;包括获得锁、检测锁是否已解除、…

dubbo的springboot集成

1.什么是dubbo&#xff1f; Apache Dubbo 是一款 RPC 服务开发框架&#xff0c;用于解决微服务架构下的服务治理与通信问题&#xff0c;官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力&#xff0c; 利用 Dubbo …

开始卷TED:第1篇 —— 《Embrace the near win》—— part: 3

She first hit a seven, I remember, and then a nine, and then two tens, and then the next arrow didn’t even hit the target. 她第一次射中了7环&#xff0c; 我记得接下来是个9环&#xff0c;然后是2个十环&#xff0c;接下来的那支箭甚至没有射到靶上。 And I saw tha…

Container ansible disguises local ansible 【容器 ansible 伪装本地 ansible】

预备条件&#xff1a; ctr & crictl $ nerdctl & containerd install了解 kubespray 是什么 kubespray 包含 ansible、ansible-playbook命令以及通过kubespray项目安装kubernetes集群的介质。 nerdctl pull quay.io/kubespray/kubespray:v2.23.1 nerdctl save -o qu…

科学和统计分析软件GraphPad Prism mac介绍说明

GraphPad Prism for Mac是一款科学和统计分析软件&#xff0c;旨在帮助研究者、科学家和学生更轻松地处理和可视化数据。 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件&#xff0c;适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试…

知识图谱gds使用记录

安装 从下载站下载对应的包到plugin目录下&#xff0c;修改配置文件/etc/neo4j/neo4j.conf&#xff0c;末尾加入gds.*&#xff0c;重新启动 在浏览器输入CALL gds.list()命令进行测试 建立图映射 为了使用图算法&#xff0c;需要先将图数据库的内容映射为一个新图 如果是全…

不定期更新免费签|在线安装全能签轻松签万能签GBOX魔力签喵喵签|赶快白嫖

使用Safari浏览器打开 1.打开平台ios.hccld.com点击应用后的“获取”获取设备UDID&#xff0c;获取后在我的里上就会显示设备UDID信息。 2.点我的-购买证书&#xff0c;选择需要购买的证书进行购买。 3.点击“兑换证书”&#xff0c;输入购买的兑换码。 4.选择你要安装的签名安…

特征工程(二)

特征工程&#xff08;二&#xff09; 特征理解 理解手上的数据&#xff0c;就可以更好的明确下一步的方向。从繁杂的切入点中&#xff0c;主要着眼于一下几个方面&#xff1a; 结构化数据与非结构化数据&#xff1b;数据的4个等级&#xff1b;识别数据中存在的缺失值&#xf…

freesurfer-reconall后批量提取TIV(颅内总体积)

#提取TIV #singleline=$(grep Estimated Total Intracranial Volume /usr/local/freesurfer/subjects/bect-3d+bold-wangjingchen-4.9y-2/stats/aseg.sta

CPT203-Software Engineering 笔记

Week 1 -- Introduction failure reason professional software development*** maintain, security, efficiency, acceptability two kinds***: generic, customized software deterioration 软件退化 reduce changes/ side effects after changes software engineering …

查看SOLIDWORKS 2024的最佳价格和特惠优惠

尊敬的客户&#xff0c; 在 SOLIDWORKS 2024 引领设计技术的未来之际&#xff0c;我们为您提供了更划算的价格和特惠优惠&#xff0c;助您在设计领域更进一步。本文将为您介绍 SOLIDWORKS 2024 的最佳价格&#xff0c;确保您获得最佳的设计工具和投资回报。 1. SOLIDWORKS202…

Rust 常用集合(下)

目录 1、使用 Hash Map 储存键值对 1.1 新建一个哈希 map 1.2 访问哈希 map 中的值 1.3 哈希 map 和所有权 1.4 更新哈希 map 1.4.1 覆盖一个值 1.4.2 只在键没有对应值时插入键值对 1.4.3 根据旧值更新一个值 1.4.4 移除hash map的某一项 1.4.5 清空hash map 1.5 哈…

面试宝典之微服务框架面试题

S1、集群与分布式有啥区别&#xff1f; &#xff08;1&#xff09;相同点&#xff1a; 分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。 &#xff08;2&#xff09;不同点&#xff1a; 分布式是指将业务系统进行拆分&#xff0c;即分布式的每一个…

双位置继电器DLS-5/2TH 额定电压:110VDC 触点形式:7开3闭 柜内安装

系列型号&#xff1a; DLS-5/1电磁式双位置继电器; DLS-5/2电磁式双位置继电器; DLS-5/3电磁式双位置继电器; DLS-5/2G电磁式双位置继电器; DLS-5/3 220VDC双位置继电器 一、用途 1.1用途 DLS-5双位置继电器(以下简称产品)用于各种保护与自动控制系统中&#xff0c;作为切换…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…