Leetcode的AC指南 —— 链表:142.环形链表II

摘要:
Leetcode的AC指南 —— 链表:142.环形链表II。题目介绍:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

文章目录

  • 一、题目
  • 二、解析
    • 1、快慢指针法
    • 2、一个破坏链表的解法
    • 3、 一个超时的题解

一、题目


力扣题目链接

题目介绍:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

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

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

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

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

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

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

提示:
链表中节点的数目范围在范围 [0, e4] 内
-e5 <= Node.val <= e5
pos 的值为 -1 或者链表中的一个有效索引

进阶:

  • 你是否可以使用 O(1) 空间解决此题?

二、解析


1、快慢指针法

思路:

  • 判断有没有环
  • 通过相遇点找到入环点
    详解见:环形链表——快慢指针详解
// 快慢指针public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;// fast指针每次走两个节点,slow指针每次走一个节点,有环的话必相遇, 追击问题while(fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;if(slow == fast){ // 有环ListNode index1 = fast; // 指向相遇的节点ListNode index2 = head; // 指向头节点// 头节点到入环点的长度 = x,环的长度 = y + z(以相遇点划分,从入环点到相遇点为y,从入环点到相遇点为z)// 则fast走过的路程是slow的2倍, 2 *(x + y)= x + y + n *(y + z),n为fast走了n圈。// 化简, x = z + (n - 1)*(y + z)// 表示,两个指针分别从头节点和相遇点出发,各走一步,一定会在入环点相遇。// 至于slow的长度为什么是 x + y 而不是 x + n *(y + z)+ y。// 这是因为slow走到入环点时,fast一定在环中的某一个位置,之后slow和fast的每次移动,都表示slow和fast之间的距离减1。// 而slow和fast的距离最大也就是环的长度y + z,也就表示,slow和fast相遇时,slow走不完环的一周。while(index2 != index1){index2 = index2.next;index1 = index1.next;}return index1;}}return null;}
  • 时间复杂度: O(n),快慢指针相遇前,指针走的次数小于链表长度,快慢指针相遇后,两个index指针走的次数也小于链表长度,总体为走的次数小于 2n
  • 空间复杂度: O(1)

2、一个破坏链表的解法

  public ListNode detectCycle(ListNode head) {// 若头节点为null或者链表只有一个节点,直接返回nullif(head == null) return null;if(head.next == null) return null;ListNode pre = head;ListNode cur = head.next;// 若当前节点不是目标节点,则从链表中删除,目标节点一定是遍历链表的最后一个节点while (cur != null){pre.next = null;pre = cur;cur = pre.next;}return pre;}

3、 一个超时的题解

思路:
判断当前节点的下一个节点在没在当前节点前面的节点序列中,在就返回当前节点的下一个节点,否则就让当前接节点等于他的下一个节点

public ListNode detectCycle(ListNode head) {if(head == null) return null;ListNode cur = head;ListNode result = head;if (result == cur.next) return result;while (cur != null){while (cur != result) {if (result == cur.next) return result;result = result.next;}cur = cur.next;result = head;}return null;}
  • 时间复杂度O(n2)
  • 空间复杂度O(1)

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

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

相关文章

【PostgreSQL】从零开始:(十四)PostgreSQL-表的定义及表基础语法

PostgreSQL表类型 PostgreSQL支持以下几种表类型&#xff1a; 普通表&#xff08;Regular Table&#xff09;&#xff1a;这是最常用的表类型&#xff0c;用于存储数据。临时表&#xff08;Temporary Table&#xff09;&#xff1a;这些表只在当前会话中存在&#xff0c;并在…

原生html + vue3 获取引用元素refs - elementUI如何在setup中进行表单校验设置

背景&#xff1a; 原生Html 引入elementPlust vue3 &#xff0c;需要在vue3 setup里做表单校验&#xff0c;通过el-form refform 的refs元素执行校验。 解决方案1&#xff1a; 保存vue挂载之后实例vm为一个常量&#xff0c;由实例来获取&#xff1a;vm.$refs.form.validate(…

【数学证明 笔记02】完备性证明方法有哪些?

文章目录 一、声明二、构造完备性证明三、反证法四、递归论证五、假设扩展六、构造模型 一、声明 本帖持续更新中如有纰漏&#xff0c;望指正&#xff01; 二、构造完备性证明 原理 构造一个对象&#xff08;通常是序列、函数、集合等&#xff09;&#xff0c;证明它满足某种…

GBASE南大通用ADO.NET 结构

GBASE南大通用ADO.NET&#xff08;全称是 .NET Framework Data Provider For GBase&#xff09;提 供给.NET 应用程序访问 GBase 数据库、获取数据、管理数据的一套完整的解决 方案。 GBASE南大通用 ADO.NET 的四个核心类及若干功能类具有以下功能&#xff1a;  建立和管…

低代码软件开发的革命

一、前言 如果一个概念能在科技圈火起来&#xff0c;它往往兼具字面简明和内涵丰富的特征&#xff0c;并具有某种重塑产业格局的潜力。低代码&#xff08;Low Code&#xff09;就是这样一个典型。顾名思义&#xff0c;低代码是指少用代码&#xff0c;甚至不用代码&#xff0c;仅…

【LeetCode:1901. 寻找峰值 II | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

中华儿慈会回家的希望宝贝守护计划儿童安全反拐宣传活动

为帮助低龄段儿童树立防拐反拐意识&#xff0c;提高儿童自护自救能力&#xff0c;近日&#xff0c;遂宁艺宁妇女儿童社会工作服务中心在汤普森幼儿园等学校开展了中华儿慈会回家的希望宝贝守护计划活动。 讲师志愿者通过设定动画人物形象讲述防拐故事&#xff0c;教授儿童遇到陌…

EasyExcel导入excel文件解析日期格式数据出现偏差

Excel日期字段值&#xff1a; 7:00:00 解决方案&#xff1a; 增加 DateTimeFormat("HH:mm")

Excel表格中的选项按钮,如何设置?

大家是否会遇到需要勾中选项的情况&#xff0c;我们可以在电子表格中制作出可以勾选、选中的选项按钮&#xff0c;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 – 自定义…

QEMU源码全解析 —— virtio(16)

接前一篇文章&#xff1a; 上一回讲解了virtio_pci_device_plugged函数的第3、4两部分&#xff0c;本回继续讲解virtio_pci_device_plugged函数的其余部分。为了便于理解&#xff0c;再次贴出virtio_pci_device_plugged函数源码&#xff0c;在hw/virtio/virtio-pci.c中&#xf…

java中使用断言的好处和坏处?断言语句如下所示:Assert.notNull(field, exceptionMsg);

断言是一种在编程中用于检查和验证假设的机制。Java 中使用断言可以通过 assert 关键字来实现。给定的断言语句 Assert.notNull(field, exceptionMsg) 表示当 field 为 null 时&#xff0c;会抛出一个指定的异常信息。 好处&#xff1a; 提供了一种简单快捷的方式来验证代码中…

学习 JavaScript 需要具备哪些基础知识?

学习JavaScript是进入现代Web开发世界的第一步&#xff0c;它是一种高级的、面向对象的编程语言&#xff0c;广泛用于前端和后端开发。学习JavaScript需要具备一系列基础知识&#xff0c;这些知识涵盖了计算机科学、编程理论和Web开发的各个方面。 以下是学习JavaScript时需要…

Java 泛型 - 从入门到入土

1、概念 泛型的本质是参数化类型&#xff0c;即给类型指定一个参数&#xff0c;然后在使用时再指定此参数具体的值&#xff0c;那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中&#xff0c;分别被称为泛型类、泛型接口、泛型方法。 Java中引入泛型最…

SpringBoot - 如何对 spring.factories 进行控制启动/关闭

问题描述 最近遇到一个启动带了一个不想要的 jar 的问题&#xff0c;由于 allinone 架构&#xff0c;其他项目需要用到该 jar&#xff0c;但是另一个项目集成后与该 jar 冲突&#xff08;因为 jar 里有 Bean 注入的业务冲突&#xff09; 原因分析 这种情况&#xff0c;只能保…

VR虚拟仿真技术应用到外事警察岗位技能培训的场景及优势

VR治安民警常态化工作实战教学演练是一种利用VR虚拟现实制作和web3d开发技术进行治安民警培训和实战演练的新型教学模式。相较于传统的培训方式&#xff0c;VR治安民警常态化工作实战教学演练具有以下优点&#xff1a; VR实战是一种完全虚拟的实战训练方式&#xff0c;他可以根…

Java 中单例模式的常见实现方式

一、什么是单例模式&#xff1f; 单例模式是一种创建型设计模式&#xff0c;它确保类只有一个实例&#xff0c;并提供全局访问点让外部代码可以访问该实例。 在 Java 中&#xff0c;可以使用单例模式来实现一些全局性的操作&#xff0c;例如配置文件管理、线程池管理、数据库连…

Linux系统中查看路由表的命令(ip route)

以下命令是在Linux系统中查看路由表的命令&#xff1a; 在Linux系统中&#xff0c;有多种方法可以查看路由设置。以下是一些常用的命令&#xff1a; ip route 或 ip -4 route&#xff08;IPv4&#xff09;/ ip -6 route&#xff08;IPv6&#xff09;&#xff1a; 这是最常用且功…

【数据结构】树状数组算法总结

知识概览 树状数组有两个作用&#xff1a; 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改&#xff0c;区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》&#xff0c;系统学习各种编程算法。主要面向…

使用IDEA创建springboot依赖下载很慢,解决方法

显示一直在resolving dependencies&#xff0c;速度很慢 原因&#xff1a;maven会使用远程仓库来加载依赖&#xff0c;是一个国外的网站&#xff0c;所以会很慢。应该使用阿里云的镜像&#xff0c;这样速度会提升很多。 步骤&#xff1a;1.右击pom.xml&#xff0c;选择"m…

nodejs+vue+微信小程序+python+PHP购物商城网站-计算机毕业设计推荐

综合购物商城管理经历和对网上信息归纳整理的结果&#xff0c;在实际应用中&#xff0c;将用户分为两种&#xff1a;管理员和用户两个角色。其中用户可以操作的内容是有限的&#xff0c;管理员可以进行的操作最多。了解系统用户的分类以及可以进行的操作&#xff0c;对于接下来…