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

news2024/11/28 18:56:10

面试题 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。最后将创建出的链表尾插到一个新的链表中。

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

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

相关文章

北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级

5月5日,“北京大学-知存科技存算一体技术联合实验室”在北京大学微纳电子大厦正式揭牌,北京大学集成电路学院院长蔡一茂、北京大学集成电路学院副院长鲁文高及学院相关负责人、知存科技创始人兼CEO王绍迪、知存科技首席科学家郭昕婕博士及企业研发相关负…

谷歌推出10门免费AI课程,无需教科书及费用

谷歌面向小白以及开发者分别推出了不同的AI课程~ 包含初级、中级和高级。课程章节大致包括:(含教学视频、参考材料、测验) 基础入门:45分钟深入了解生成式AI 简单实操:30分钟掌握大语言模型 了解如何释放生成式 AI S…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

学习云计算亚马逊云科技AWS的6大教科书神级别免费网站

亚马逊☁️(AWS)是全球云行业最🔥火云平台,云行业的就业机会和市场前景都非常巨大,现在通过学AWS去转云会是个千载难逢的好机会。小李哥这次来盘点学习AWS的6大教科书级免费官方网站(免费课程+动手实验)。欢迎大家点击图片左下角加…

栈的实现以及c语言解决括号匹配问题

一、栈的实现 1、头文件 typedef int STDataType; typedef struct Stack {STDataType* _a;int _top; // 栈顶int _capacity; // 容量 }Stack; // 初始化栈 void StackInit(Stack* ps); // 入栈 void StackPush(Stack* ps, STDataType data); // 出栈 void StackPop(S…

C语言内存函数memcpy与memmove

一.memcpy的使用和模拟实现 1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…

无人零售,重塑购物新纪元

在这个快节奏的时代,科技的每一次跃进都在悄无声息地改变着我们的生活方式。而今,无人零售正以雷霆之势,颠覆传统购物模式,为我们带来前所未有的便捷与智能体验。想知道无人零售如何彻底改变我们的购物方式吗?跟随我&a…

2024五一劳动节活动策划方案

2024五一劳动节打工人青松游园大会(劳动节放青松主题)活动策划方案-51P.pptx 活动策划信息: 方案页码:51页 文件格式:PPT 方案简介: 劳动是世界上最伟大的事 所以我们该把一些劳动留给明天&#xff0…

Offline:IQL

ICLR 2022 Poster Intro 部分离线强化学习的对价值函数采用的是最小化均方bellman误差。而其中误差源自单步的TD误差。TD误差中对target Q的计算需要选取一个max的动作,这就容易导致采取了OOD的数据。因此,IQL取消max,,通过一个期望回归算子…

【Stable Diffusion本地部署简易教程】从入门到实践

Stable Diffusion 本地部署指南:简单易懂的图文教程 引言 Stable Diffusion是一种深度学习模型,用于生成高质量的图像。本地部署意味着你可以在自己的计算机上运行这个模型,从而无需依赖于在线服务。本教程将循序渐进地指导你如何在自己的计…

勾股定理 口诀

def t_o(a):t int(a/2)b t*t-1c t*t1f (a*ab*bc*c)print(f,ou,a,b,c,a*ab*b,c*c)def t_j(a):t a*abint(t/2)c t-bf (a*ab*bc*c)print(f,j-,a,b,c,f,a*ab*b,c*c)for i in range(2,100,2):t_o(i)t_j(i1) 奇数平方写连续 偶数半方加减一

Java 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型,可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入(Dependency Injection)、面向切面编程(Aspect-Or…

【网络编程】http协议

预备知识 什么是http协议 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一个应用层的协议,用于在网络中传输超文本(如HTML文档)。HTTP协议建立在TCP/IP协议之上,是Web浏览器和Web服务器…

数据结构之链表深度讲解

小伙伴们,大家好呀,上次听我讲完顺序表想必收获不少吧,嘿嘿,这篇文章你也一样可以学到很多,系好安全带,咱们要发车了。 因为有了上一次顺序表的基础,所以这次我们直接进入正题,温馨…

Meta最新研究: Flash Attention 为何是系统性能瓶颈?

I. 引言 随着机器学习趋向于更大和更复杂的模型,模型训练过程变得越来越计算和资源密集。生成式AI的出现进一步推动了模型开发的边界,大型语言模型(LLMs)通常在数百或数千个GPU上训练数月。以LLaMA2的70-B参数模型为例,需要1,720,320 GPU小时来训练。对于如此长的训练作业,训练…

2024-05-07 商业分析-赚钱之前怎么预估风险-记录

摘要: 2024-05-07 商业分析-赚钱之前怎么预估风险-记录 赚钱之前怎么预估风险 好,大家好,今天我们来讲的是叫什么赚钱之前怎么评估风险啊,这个问题啊提的很好啊,我们待会儿来讲啊。呃,首先呢今天这个主题呢来自于昨天…

腾讯云服务器之ssh远程连接登录

一、创建密钥绑定实例 创建密钥会自动下载一个私钥,把这个私钥复制到c盘 二、设置私钥权限 1、删除所有用户权限 2、添加当前用户权限 查看当前用户名 echo %USERNAME%三、ssh远程连接到服务器 ssh ubuntu175.xxx.xxx.112 -i C:\Crack\cs2.pem四、修改root密码 s…

2024年荆州中级工程师报名开始了吗?

2024年荆州中级工程师职称报名已经开始了 2024年荆州中级职称报名时间: (一)网上报名时间: 4月26日9时至5月10日16时。超过时间将不能操作。 (二)网上缴费时间: 4月26日9时至5月10日24时 网上…

太原理工大学Python数据分析原理与应用(课外考题:8~11章)

这部分大概只考10分,且大部分出在选择题,填空最多一两个 (仅供参考) 第十章 (理解概念为主,无需看推导过程) 第十一章

常用算法汇总

作者:指针不指南吗 专栏:算法篇 🐾算法思维逻辑🐾 文章目录 1.判断闰年2.计算从某天到某天的天数3.二分4. 前缀和5.差分6.图论6.1dfs6.2走迷宫 7.最短路7.1dijkstra7.2foly 8.并查集9.数论9.1gcd lcm9.2判断素数(质数)9.3分解质因…