当前位置: 首页 > article >正文

OJ题目下篇

我们今天继续来看链表的算法题目

我们先来看第一道题:

这是一道牛客网的题目:

链表的回文结构_牛客题霸_牛客网

我们来看这道题:首先我们要判断是不是回文结构,我们之前判断过数组的回文,这是比较好判断的,但是单链表只能单向的进行,不能反向。

这时候我们就有了一个思路:我们把他给改成反向的不就可以了;然后把他两边往中间靠拢:这样来进行比较:但是我们该怎样的把他给改成反向的呢?在哪里反向

思路一:我们可以使用快慢指针来找到我们的中间节点,然后我们让中间节点以后的结点的指针都变成反向的,我们可以设置三个指针来完成,完成以后我们就可以在他的两边开始进行遍历来比较

我们来看代码

这个就是我们实现完的代码。

其实我们还有一种思路,就是因为我们之前都是在数组里面判断回文结构的,数组来进行判断也是比较简单,所以这里我们就可以产生另一种思路,那就是我们可以创建一个数组,用来存储我们的链表里面的数据,储存完后,我们使用数组来进行判断,这样的话也可以;

我们来看第三道题:

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

我们来看第三道题,这是一道力扣上面的题目:题目的要求是让你找链表的交点,但是我们在进行的时候,他的两个相交的链表长度可能是不一样的,那么我们就要先让他们位于同一起跑线上来进行:我们可以计算出长的链表比短的链表的长度有多长,然后让长链表先走,让他们在同一起跑线上,然后进行比较;

这道题比较简单

我们来看第四道题:

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

我们的这个题目的要求是看你的这个链表有没有环,有的话返回true,没有的话返回false

这个题目我们的思路是快慢指针,我们使用快满指针来进行判断,当我们的两个指针进入到环里面以后,一个走得快,一个走的慢,但是他们一定是会相遇的;不管你的循环链表里面是奇数个还是偶数个,或者是说这两个指针相差的距离是奇数还是偶数,都是可以的,只是奇数的时候会套圈,但是还是可以遇上,全是偶数的时候,第一圈就可以遇见了。

我们来看我们的代码

在这个代码里面要注意,我们进入到while循环里面去以后,我们是要先进来就要改变fast和slow指针,不能进来就进行比较,进来的时候他们都是head;这时候不能进行比较;

我们来看第五道题:

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

这一题我们的要求是你首先要判断是不是环形链表,如果是的话就把他的成环的开始的结点返回,如果没有成环的话就返回NULL;

这一题会有一个新的东西:

我们先看第一个要求,判断环形链表的话,我们还是快慢指针来解决,没有什么问题,然后就是返回他的结点,这个的话我们就要看一个新的东西了:

我们的快慢指针结合的位置到我们的第一个开始循环的位置,和我们的第一个有效的结点到我们的开始循环的结点的距离是一样的;

我们就可以通过这个来实现我们的代码:


http://www.kler.cn/a/503819.html

相关文章:

  • 机组存储系统
  • 设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo
  • Webpack和Vite的区别
  • Jira用例自动去除summary重复用例
  • 2 XDMA IP中断
  • React Fiber框架中的Render渲染阶段——workLoop(performUnitOfWork【beginWork与completeWork】)
  • AI赋能下的美颜API与滤镜SDK:从传统到深度学习的进化之路
  • 深入理解 Python 的装饰器
  • Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图
  • 计算机的错误计算(二百一十一)
  • 交互数字人:革新沟通的未来
  • Java Agent(三)、ASM 操作字节码入门
  • 【机器学习】神经网络训练技巧
  • 使用VSCode搭建Ruby on Rails集成开发环境
  • mac intel芯片下载安卓模拟器
  • 【css】浏览器强制设置元素状态(hover|focus……)
  • rclone,云存储备份和迁移的瑞士军刀,千字常文解析,附下载链接和安装操作步骤...
  • MAC AndroidStudio模拟器无网络
  • 新版懒人精灵基础老狼孩插件经典例子板块-视频教程
  • C# 内存篇
  • 《零基础Go语言算法实战》【题目 4-1】返回数组中所有元素的总和
  • 蓝牙BT04-A的使用与相关AT指令
  • AI大模型开发—1、百度的千帆大模型调用(文心一言的底层模型,ENRIE等系列)、API文档目的地
  • 多线程基础系列-多线程初识
  • kafka原理和实践
  • Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)