链表--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、抽象与扩展

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

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

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

相关文章

BUG汇总

20240103 通用&#xff0c;驼峰命名法&#xff0c;mybatis。 mybatis入门程序中&#xff0c; // 获取对象的顺序为&#xff1a;SqlSessionFactoryBuild-》SqlSessionFactory-》SqlSessionSqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();I…

Python 深度学习框架之keras库详解

概要 深度学习已经成为解决各种复杂问题的有力工具&#xff0c;而 Python Keras 是一个流行的深度学习框架&#xff0c;它提供了简单而强大的工具来构建和训练神经网络。无论您是深度学习新手还是经验丰富的研究人员&#xff0c;Keras 都可以满足您的需求。本文将深入介绍 Pyt…

GROUP_CONCAT报错解决

有如下表 其中awardee和awardee_unit都是保存的json类型的字符串, awardee是多个人员id, awardee_unit是部门的全路径 查询时要注意转换 需要将name拼接起来合并成一行,直接 GROUP_CONCAT 会报错 百度的大部分答案是修改数据库配置去掉严格模式,如果不方便修改数据库可以这样…

【CMake】3.单项目单模块添加第三方依赖包示例工程

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 单项目单模块 - 添加第三方依赖示例工程 https://github.com/LABELNET/cmake-simple/tree/main/simple-deps 1. 单模块工程 第三方依赖 CMake 单模块工程&#xff0c;这是一个示例工程 simple-deps , 项目…

基于ssm的驾校预约管理系统+jsp论文

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

制药厂污废水处理需要哪些设备和工艺要求

制药厂是一种特殊的工业企业&#xff0c;其生产过程中会产生大量的废水&#xff0c;其中含有各种有害物质和化学物质。为了保护环境和人民的身体健康&#xff0c;制药厂需要对污废水进行有效的处理。那么&#xff0c;制药厂污废水处理需要哪些设备和工艺要求呢&#xff1f; 首先…

嵌套调用和链式访问

嵌套调用 嵌套调用就是函数之间的互相调用&#xff0c;每个函数就是⼀个乐高零件&#xff0c;正是因为多个乐高的零件互相无缝的配合才能搭建出精美的乐高玩具&#xff0c;也正是因为函数之间有效的互相调用&#xff0c;最后写出来了相对大型的程序。 假设我们计算某年…

奇数码问题

title: 奇数码问题 date: 2024-01-05 11:52:04 tags: 逆序对 cstefories: 算法进阶指南 题目大意 解题思路 将二维转化为一维&#xff0c;求他的逆序对&#xff0c;如果逆序对的奇偶性相同&#xff0c;则能够实现。 代码实现 #include<iostream> #include<string.h&…

深度学习框架TensorFlow2快速入门教程

01 深度学习框架TensorFlow2快速入门教程 目录结构 01 概述 02 准备OVF虚拟机镜像 03 导入Ubuntu22的初始化环境 04 使用VMWare拍摄快照进行备份 05 Docker环境的测试和使用 06 安装Nvidia容器工具包 07 GPU支持的TensorFlow的环境搭建和踩坑 08 拉取非GPU支持的TensorFlow镜…

vite 如何设置 pwa,让网页类似 app 那样运行,使用插件 vite-plugin-pwa

vite 如何设置 pwa&#xff0c;让网页类似 app 那样运行&#xff0c;使用插件 vite-plugin-pwa 一、概述 情况还是那么个情况&#xff0c;还是原来的项目 vue2 改为 vitetsvue3 遇到的问题&#xff0c;今天这个问题是如何 在 Vite 环境下设置 PWA。 PWA 就是网页应用可以像 a…

外贸SOHO建站产品图来源?海洋建站教程?

外贸SOHO建站如何处理产品图片&#xff1f;外贸网站设计怎么做&#xff1f; 在当今的互联网时代&#xff0c;外贸SOHO建站已成为越来越多人的选择。然而&#xff0c;对于许多新手SOHO来说&#xff0c;如何获取高质量的产品图却是一个不小的难题。海洋建站将为大家详细解析外贸…

Python元组与字典的基础介绍

元组(tuple) 在Python中,元组是不可变的有序元素的序列 即创建后不可以被修改 创建方式val_name ([val],[val].....) #----------声明------------ tuple_1 (1,2,3) print(tuple_1)元组的运算 虽然说元组的额元素是不可以更改的,但元组之间可以使用,,*号进行运算,运算后会…