面试经典150题——环形链表

Suffering, for the weak is the tomb of death, and for the strong is the soil of germinal ambition.​

1. 题目描述

image-20240307110749871

2.  题目分析与解析

2.1 思路一

这个题目就是判断一个链表有没有环,其实我们之讲过一个题目,就实现了判断链表有没有环的步骤:面试经典150题——快乐数,并且还有图示,就是使用快慢指针法,因此在本篇文章中就不过多赘述了,直接给出代码思路。

代码思路

  1. 定义两个指针,分别表示快慢指针

  2. 让快指针以2的速度前进,慢指针以1的速度前进

  3. 如果两个指针相交,说明链表中存在环结构,返回true

  4. 如果遍历到结尾仍然没有返回false就说明没有环,返回false

2.2 思路二

因为我们用一种很简单的思路如何判断自己是否在一个地方转圈,一个很好的方法就是在我们开始走的位置做一个标记,用来标注我们之前走过这个地方,如果未来我们又能发现这个标记,那么就说明我们绕圈了。

把这种思路对应在题目中,就是设置一个标记来表示我是否走过这个地方,如果走过我在后续遍历过程中又能回到这个地方,那么就说明链表存在环状结构,如果走到目的地(结尾),发现还是没有经历过标记点,那么就说明不存在环状结构,返回false。

如何标记?因为我们走的每一个点是一个ListNode对象,而对象的唯一标识就是它的引用或者hash值了吧?因此我们可以使用一个hashMap,用来存储每一个走过位置的hash,如果在后续遍历过程中还能匹配到之前走过的hash,那么就说明出现环状结构了。

代码思路

  1. 定义一个hashMap

  2. 遍历链表,没走过一个节点之前先判断该节点是否在hashMap存在,如果存在直接返回true

  3. 如果遍历完毕所有节点都没有返回false,那么说明不存在环状结构,返回false

3. 代码实现

3.1 思路一

image-20240307161948433

image-20240307161935463

3.2 思路二

使用哈希表——对比引用

image-20240307163536719

image-20240307163219728

使用哈希表——对比hash值

image-20240307163524394

image-20240307163456656

4. 相关复杂度分析

对于给出的三种解决环形链表问题的方法,我们来分析它们的时间和空间复杂度:

思路1:使用快慢指针

  • 时间复杂度:O(n),其中 n 是链表的长度。快指针每次移动两步,慢指针每次移动一步,因此快指针最多移动 n/2 次,慢指针最多移动 n 次,整体遍历的时间复杂度为 O(n)。

  • 空间复杂度:O(1),只使用了常数级别的额外空间。

思路2:使用哈希表(对比引用)

  • 时间复杂度:O(n),其中 n 是链表的长度。遍历链表需要 O(n) 的时间,同时在哈希表中查找节点是否存在的时间复杂度是 O(1)。

  • 空间复杂度:O(n),需要使用一个哈希表来存储链表中的节点,因此空间复杂度是 O(n),其中 n 是链表的长度。

思路3:使用哈希表(对比哈希值)

  • 时间复杂度:O(n),其中 n 是链表的长度。与思路2相似,遍历链表需要 O(n) 的时间,同时在哈希表中查找哈希值是否存在的时间复杂度是 O(1)。

  • 空间复杂度:O(n),需要使用一个哈希表来存储链表中的节点的哈希值,因此空间复杂度是 O(n),其中 n 是链表的长度。

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

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

相关文章

1 数据分析概述与职业操守 (3%)

1、 EDIT数字化模型 E——exploration探索 (是什么) 业务运行探索:探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 D——diagnosis 诊断 (为什么) 问题根源诊断:当业务指标偏离正常值时&…

C#,哈夫曼编码(Huffman Code)压缩(Compress )与解压缩(Decompress)算法与源代码

David A. Huffman 1 哈夫曼编码简史(Huffman code) 1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师Robert M. Fano给他们的学期报告的题目是,寻找最有效的二进制编码。由于无法证明哪个已有编码是…

GCN 翻译 - 2

2 FAST APROXIMATE CONVOLUTIONS ON GRAPHS 在这一章节,我们为这种特殊的的图基础的神经网络模型f(X, A)提供理论上的支持。我们考虑一个多层的图卷积网络(GCN),它通过以下方式进行层间的传播: 这里,是无…

Spring事务注解@Transactional的流程和源码分析

Spring事务简介 Spring事务有两种方式: 编程式事务:编程式事务通常使用编程式事务管理API实现,比如Spring提供的PlatformTransactionManager接口,使用它操控事务。声明式事务:注解式事务使用AOP(面向切面…

【24春招/简历】如果技术和学历不行,如何包装自己在春招中占得先机?突出你的亮点!

面试讲什么 学历: 行情 要美化(吹牛) 面试很好 技术能力 让面试官知道你会哪些技术,尽量细节 “熟悉spring” > ioc流程,Bean的生命周期,循环依赖,常见注解 熟悉redis > 缓存穿透&…

【Java设计模式】八、装饰者模式

文章目录 0、背景1、装饰者模式2、案例3、使用场景4、源码中的实际应用 0、背景 有个快餐店,里面的快餐有炒饭FriedRice 和 炒面FriedNoodles,且加配菜后总价不一样,计算麻烦。如果单独使用继承,那就是: 类爆炸不说&a…

Django项目的部署——之环境的重建

Django项目的部署 版本对应 Django 2.0.6 可以匹配mysql5.6.48版本,和mysql5.7.7版本一块用会报错。 其它版本未测试。 创建新的虚拟环境 根据项目版本安装对应的Python包。比如项目开发时用的是python-3.6.4,则安装该版本,并配置环境变量…

【智能家居】东胜物联ODM定制ZigBee网关,助力能源管理解决方案商,提升市场占有率

背景 本文案例服务的客户是专业从事智能家居能源管理的解决方案商,其产品与服务旨在帮助用户监测、管理和优化能源消耗,以提高能源使用效率。 随着公司的扩张,为了增加市场占有率,他们希望找到更好的硬件服务支持,以…

leetcode 3.6

Leetcode hot 100 一.矩阵1.旋转图像 二.链表1. 相交链表2.反转链表3.回文链表4.环形链表5.环形链表 II 一.矩阵 1.旋转图像 旋转图像 观察规律可得: matrix[i][j] 最终会被交换到 matrix [j][n−i−1]位置,最初思路是直接上三角交换,但是会…

学习clickhouse 集群搭建和分布式存储

为什么要用集群 使用集群的主要原因是为了提高系统的可扩展性、可用性和容错性。 可扩展性:当单个节点无法处理增加的负载时,可以通过添加更多的节点到集群来增加处理能力。这使得系统可以处理更大的数据量和更高的查询负载。可用性:在集群…

Java项目:41 springboot大学生入学审核系统的设计与实现010

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本大学生入学审核系统管理员和学生。 管理员功能有个人中心,学生管理,学籍信息管理,入学办理管理等。 学…

解决 RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Half‘

解决 RuntimeError: “LayerNormKernelImpl” not implemented for ‘Half’。 错误类似如下: Traceback (most recent call last): File “cli_demo.py”, line 21, in for results in webglm.stream_query(question): File “/root/WebGLM/model/modeling_webgl…

CTP-API开发系列之三:柜台系统简介

CTP-API开发系列之三:柜台系统简介 CTP-API开发系列之三:柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之三:柜台系统…

基于Yolo5模型的动态口罩佩戴识别安卓Android程序设计

禁止完全抄袭,引用注明出处。 下载地址 前排提醒:文件还没过CSDN审核,GitHub也没上传完毕,目前只有模型的.pt文件可以下载。我会尽快更新。 所使用.ptl文件 基于Yolo5的动态口罩佩戴识别模型的pt文件资源-CSDN文库 项目完整文…

信息抽取技术:电商领域的智能化革命与市场策略优化

一、引言 在当今快速发展的互联网电商领域,信息抽取技术的应用已经成为商家优化供应链、降低成本、提高响应速度的关键手段。随着消费者需求的日益多样化和个性化,电子商务平台需要更高效、智能的数据处理能力来应对市场的挑战。从供应商管理到库存优化…

蓝桥杯(3.7)

P1102 A-B 数对 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int c sc.nextInt();int[] res new int[n1];for(int i1;i<n;i)res[i] sc.nextInt();int sum 0;for(i…

看一看阿里云,如何把抽象云概念,用可视化表达出来。

云数据库RDS_关系型数据库 云数据库RDS_关系型数据库 专有宿主机 云数据库RDS_关系型数据库_MySQL源码优化版 内容协作平台CCP-企业网盘协同办公-文件实时共享

python基础——入门必备知识

&#x1f4dd;前言&#xff1a; 本文为专栏python入门基础的第一篇&#xff0c;主要带大家先初步学习一下python中的一些基本知识&#xff0c;认识&#xff0c;了解一下python中的一些专有名词&#xff0c;为日后的学习打下良好的基础,。本文主要讲解以下的python中的基本语法&…

【nodejs】“__dirname is not defined”错误修复

▒ 目录 ▒ &#x1f6eb; 问题描述环境 1️⃣ 原理CommonJS vs ESM错误原因 2️⃣ 禁用 ESM 模式并改用 CommonJS方案一&#xff1a;项目方案二&#xff1a;单文件 3️⃣ 在 ESM 模式下自实现__dirname&#x1f4d6; 参考资料 &#x1f6eb; 问题 描述 从网上找了一份代码&am…

opengl 学习(一)-----创建窗口

创建窗口 分类opengl 学习(一)-----创建窗口效果解析教程补充 分类 c opengl opengl 学习(一)-----创建窗口 demo: #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>using names…
最新文章