【数据结构】链表经典OJ题目练习(2)

面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)

思路1:先计算出链表的长度,在将链表中的值存在数组中,在返回第k个节点。

思路2:利用快慢指针,先让快指针走k步,在让快慢指针分别同时走,当快指针走到空的时候,慢指针就是倒数第k个节点。

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

思路:先使用快慢指针找到来链表的中间节点,在将中间节点之后的链表倒置(注意倒置之后,中间链表的前一个节点依然指向尾结点),最后遍历链表,判断链表是否是回文结构。

160. 相交链表 - 力扣(LeetCode)

思路:先分别计算出两个链表的长度,算出它们长度之间的差值deference,再让长度较长的链表先走deference步,这样两个链表的长度就会相等,再进行遍历链表,找出相交点(注意,在寻找相交点的时候要找节点的地址,不能找节点的val值)。

141. 环形链表 - 力扣(LeetCode)

思路:使用快慢指针,如果fast或者fast->next为空的话说明链表不是一个环形链表,如果fast节点等于slow节点的话,说明fast追上了slow节点(fast一定会追上slow节点,这个结论会在下文解释到),也就说明了链表会进入一个环形的链表。

环形链表的几种情况:

那么,我们就要提出几个问题:

1.为什么一定会相遇,有没有可能错过,永远也追不上?

2.fast节点走3步,4步,或者n步是否可以与slow指针相遇?

先来解答第一个问题:

假设slow进入环的时候slow与fast节点的距离为N,fast节点每次走两步,slow节点每次走一步,所以每当slow节点走一步的时候,快慢指针之间的距离就会缩小1,直到它们之间的距离变为0.

slow走的步数                  fast与slow之间的距离

0                                      N

1                                      N-1

2                                      N-2

……                                 ……

x                                      0

第二个问题:

我们先来观察slow节点每次走1步和fast节点每次走3步时候的情况

这时候,我们需要分两种情况来分析两个指针:

a.当slow节点进入环的时候,快慢指针之间的距离N是一个偶数

b.当slow节点进入环的时候,快慢指针之间的距离N是一个奇数

slow走的步数         快慢指针之间的距离(N为偶数)       快慢指针之间的距离(N为奇数)

0                             N                                                     N

1                             N-2                                                  N-2

2                             N-4                                                  N-4

……                        ……                                                ……

x-1                          2                                                      1

x                             0                                                       -1

在这里,我们发现快慢指针之间的距离N是一个奇数时,fast与slow会错过,永远也不会相遇。

但是,先别急,这个结论真的正确吗?或者我们说快慢指针之间的距离N有可能是一个奇数吗?这就需要我们再次证明一下:

我们分析一下追上与追不上的情况:

1.N是偶数,第一轮就可以追上

2.N是奇数,第一轮追击就会错过,距离变成C-1

    a.如果C-1是偶数,下一轮就追上了

    b.如果C-1是奇数,那么就永远也追不上了

综上所述:同时存在N是奇数并且C是偶数,那么就永远也追不上了,我们接下来探讨的就是是否存在这种情况。

假设在slow节点进环时,slow节点走的长度为L ,fast节点走的距离为L+x*N+C-N,  整个环的长度为C。

在slow节点进环时,fast与slow节点分别走过的距离为:

fast:L+x*N+C-N  (x为快指针绕环走的圈数)

slow:L

接下来,因为fast节点走过的距离是slow节点走过的距离的3倍,所以我们会得到一个等式:

    3*L=L+x*C+C-N

→2*L=x*C+C-N

→2*L=(x+1)*C-N

等式的左边一定是一个偶数,右边如果N是一个奇数,那么C一定也是一个奇数;右边如果是一个偶数,那么C一定也是一个偶数。所以就不会存在N是奇数并且C是偶数的情况。所以fast节点每次走3步的情况下,就不存在fast节点追不上slow节点的情况。

按这种方法证明其他fast节点走n步的情况,依然可以证明出fast节点一定可以追上slow节点的结论。

142. 环形链表 II - 力扣(LeetCode)

这道题目要求我们找到进入环形链表的节点,并且返回节点。

思路:首先找到快慢指针相遇的节点,此时,meet节点就是slow指针。meet指针到环形链表入口与head节点到环形链表的距离相等。

那么,为什么meet指针到环形链表入口与head节点到环形链表的距离相等呢?

证明:

我们假设head到入口的距离为L,入口到meet节点的距离为N,整个环的长度为C。

在相遇时,fast与slow节点分别走过的距离为:

fast:L+x*C+N  (x为快指针绕环走的圈数)

slow:L+N(slow指针在没有走完第一圈的时候就会被追上,因为当slow节点进入环的时候,fast指针已经在环中走了一段时间,二fast节点的速度有是slow节点的两倍,所以slow节点会在走完一圈之前就被fast节点追上)

接下来,因为fast节点走过的距离是slow节点走过的距离的两倍,所以我们会得到一个等式:

        2*fast=slow

→2*L+2*N=L+x*C+N

→       L+N=x*C

→            L=x*C-N

→            L=(x-1)*C+C-N

到这里我们会发现C-N的距离其实就是meet节点到环入口的距离,这个距离加上若干个环的长度就是L的长度。所以让meet节点和head节点分别同时走,它们一定会在环的入口处相遇。

138. 随机链表的复制 - 力扣(LeetCode)

思路:在每个节点之后创建一个节点并将节点的值赋给创建的节点,再将random指向cur->random->next。最后将创建出的链表尾插到一个新的链表中。

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

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

相关文章

[译]Elasticsearch _source Doc_values And Store Performance

原文地址 https://sease.io/2021/02/field-retrieval-performance-in-elasticsearch.html 在这篇博文中,我想从性能的角度探讨 Elasticsearch 为我们存储字段和查询时检索字段提供了哪些可能性。 事实上,Lucene(Elasticsearch 和 Solr 构建的…

详细分析Mybatis与MybatisPlus中分页查询的差异(附Demo)

目录 前言1. Mybatis2. MybatisPlus3. 实战 前言 更多的知识点推荐阅读: 【Java项目】实战CRUD的功能整理(持续更新)java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 本章节主要以Demo为例&#xff…

122. Kafka问题与解决实践

文章目录 前言顺序问题1. 为什么要保证消息的顺序?2.如何保证消息顺序?3.出现意外4.解决过程 消息积压1. 消息体过大2. 路由规则不合理3. 批量操作引起的连锁反应4. 表过大 主键冲突数据库主从延迟重复消费多环境消费问题后记 前言 假如有家公司是做餐饮…

3行代码,实现一个取色器

前言 今天发现了一个很好玩的 API ——EyeDropper。 EyeDropper API 提供了一种创建拾色器工具的机制。使用该工具,用户可以从屏幕上取样颜色,包括浏览器窗口之外的区域。 这是 MDN 上对它的介绍,可以取包括浏览器窗口之外的区域。我们一起看看是怎么个事 什么是取色器 取…

24年最新AI数字人简单混剪

24年最新AI数字人简单混剪 网盘自动获取 链接:https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码:0b8x

【C 数据结构-图】2. 图的存储结构

文章目录 【 1. 图的顺序存储结构 】1.1 基本原理1.2 顺序存储结构的 C 实现 【 2. 图的链式存储结构 】2.1 图的临接表存储结构2.1.1 临接表的 基本原理2.1.2 临接表的 链表节点2.1.3 邻接表 各结构体的C实现2.1.4 临接表 计算顶点的出度和入度邻接表计算 无向图的出度和入度邻…

【Fastadmin】后台角色组权限问题(multi,开关switch,控制器新增方法)

1.列表开关类型的权限 如图: 此类开关请求的方法为multi 开关在点击的时候默认是只允许修改数据库的status字段的,如果我们开关不是status字段,我们需要在服务端对应的控制器中定义protected $multiFields"id,name,swith";&#x…

一个物业管理服务项目的思考——智慧停车场无人值守呼叫系统到电梯五方对讲再到呼叫中心

目录 起源智慧停车场无人值守呼叫系统然后电梯五方对讲系统又然后物业呼叫中心集控E控中心怎么做 起源 小区里新装了智慧停车场系统,马上展现出了科技化、现代化的新形象。一个显著的好处是:停车场的出入口,再也看不到司机和保安争吵的场景了…

四川景源畅信:抖音的运营策略有哪些?

在数字营销的大潮中,抖音以其巨大的用户基础和强大的传播力成为众多品牌和商家的必争之地。那么,抖音的运营策略有哪些呢?这个问题涉及到内容创作、用户互动、数据分析和品牌合作等多个方面。 一、内容创作与优化在抖音,内容是吸引用户的关键…

C++ 数据内存分布揭秘:从栈到堆的探索之旅

目录 1. 栈(Stack) 2. 堆(Heap) malloc和new的区别 堆与栈在C中的异同点详解 3. 数据段(Data Segment) 4. 代码段(Code Segment) 5. 动态内存分配的陷阱 当我们谈论C编程时,对内存布局的理解至关重要。本文将深入探讨C中各种变量和数据结构在内存中的分布情况…

这些CTF,不仅学技术,还有巨额奖金!

前言: 不会吧,不会吧,不会还有安全er不知道CTF是什么吧? 在程序员的世界里,也有ACM这样的编程大赛,成为各路编程高手一较高下展示能力的平台。 那在网络安全的圈子里,各路黑客红客白帽子们又…

rag-embeddings基础流程

什么是检索增强的生成模型 LLM 固有的局限性 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 检索增强生成 RAG(Retrieval Augmented Generation)顾名思义,通过检索的方法来增强生成模型的能力。 类比:你可以把这个…

linux 内核编译

目录 Linux操作系统框架 Linux内核的主要功能: Linux的内核目录结构: 结构图: 详细介绍: uname - a 补充 编译之前 UTC 时间补充 Linux内核编译流程: 方法一: 官方内核编译: 1. 运行 build.sh 脚本, 记得加 sudo 权…

Day 24 数据库管理及数据类型

数据库管理及数据类型 一:数据类型 1.数值类型 整数类型 ​ 整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT ​ 作用:用于存储用户的年龄、游戏的Level、经验值等 浮点数类型 ​ 浮点数类型:FLOAT DOUBLE ​ 作用&#xf…

linux或ubuntu环境下需要自行安装vivado USB Program下载程序驱动

如果在linux或ubuntu环境下,不安装驱动是无法下载FPGA程序的。在linux或ubuntu环境下安装程序不要自动安装。 johnjohn-wang:~/vitis2021.2/Vivado/2021.2/data/xicom/cable_drivers/lin64/install_script/install_drivers$ sudo ./install_drivers

1天搞定SpringBoot+Vue全栈开发 (7)Axios网络请求

1.Axios的使用 Axios中文文档 | Axios中文网Axios 是一个基于 promise 的网络请求库&#xff0c;可以用于浏览器和 node.jshttps://www.axios-http.cn/ 2.与vue整合 App.vue: <template><div id"app"><Moviev-for"movie in movies":key&qu…

一致性评价政策加速行业仿制药洗牌,惯爱为代表的新锐品牌崭露头角

从印度神油到以形补形&#xff0c;男人的问题&#xff0c;从古至今一直困扰着很多人&#xff0c;大多人都羞于启齿。然而&#xff0c;沉默的背后&#xff0c;隐藏着令人震惊的数据&#xff1a;据统计显示&#xff0c;ED&#xff08;勃起功能障碍&#xff09;是男性生殖系统发病…

9.Java内置锁的核心原理-Synchronized

文章目录 Java内置锁的核心原理-Synchronized1.线程安全问题1.1.自增运算分析1.2.临界区资源和临界区代码片段 2.synchronized关键字2.1.synchronized同步方法2.2.synchronized同步代码块2.3.synchronized同步方法和synchronized同步代码块区别2.4.静态的同步方法2.5.内置锁的释…

18、ESP32 ESP-NOW 点对点通信

ESP-NOW 是乐鑫自主研发的无连接通信协议&#xff0c;具有短数据包传输功能。该协议使多个设备能够以简单的方式相互通信。 ESP-NOW 功能 ESP-NOW 支持以下功能&#xff1a; 加密和未加密的单播通信;混合加密和未加密的对等设备;最多可携带 250 字节 的有效载荷;发送回调功能…

C#修改默认参数settings文件

右击项目在设置中进行修改&#xff1a; 千万不要在这里改。 如果要在自己的项目里添加这个文件&#xff0c;首先新建个文件夹&#xff0c;然后添加.setting文件&#xff0c;然后再像上面说的那样添加属性。