链表经典面试题下

目录

如有帮助,还望三连支持,谢谢!!!

题目一:141. 环形链表 - 力扣(LeetCode)

题目二:142. 环形链表 II - 力扣(LeetCode)

题目三:138. 随机链表的复制 - 力扣(LeetCode)

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


如有帮助,还望三连支持,谢谢!!!

书接上回,上次我们讲了一些链表的经典面试题目,并留下了一个问题,那么今天我们就来探讨一下这个问题,并且来讲一下剩余题目。

题目一:141. 环形链表 - 力扣(LeetCode)

上篇文章我们讲解了判断一个链表是否带环的问题,我们当时讲解的思路是:快慢指针,即定义两个指针:fast,slow,快指针一次走两步,慢指针一次走一步,链表如果有环的话快慢指针一定会在环中相遇。并且我们讲解了一定会相遇的原因:本质就是追击相遇问题。

并且引出一个问题:

我们证明了fast走两步一定能追上,那fast指针一次走3步,4步......n步呢?还一定能在环中相遇吗?

我们来看一下fast一次走三步的情况:

经过我们上面的分析,我们在假设追不上的情况存在时,推出了永远追不上的情况:

N为奇数,并且C为偶数

那么这种情况存在吗?我们接着来看下面的分析:

经过上面的分析,我们得出:当fast一次走三步时一定能够追上。

至于fast一次走4步,5步......与上面分析结果大同小异,这里只抛砖引玉,读者有兴趣可以自己深入研究一下。

题目二:142. 环形链表 II - 力扣(LeetCode)

乍一看:这不是和我们第一道题目一样吗?确实十分像,都是判断链表是否存在环形链表,但是这个题目要求如果有环,返回开始入环的第一个节点,这个要求还是有意思的。

那么我们还是先说思路:快慢指针,慢指针一次走一步,快指针一次走两步,先判断链表是否有环

如果有环的话,创建两个指针,一个指针从head节点开始,另一个指针从相遇点meet开始,两个指针每次都走一步,两个指针相遇的点就是链表入环的第一个节点。

代码如下:

那么,为什么meet和phead指针一定会在链表入环第一个节点相遇?讲解如下图所示:

那么,相遇时slow有没有可能会在环里走了超过一圈?

不可能,fast速度是slow的两倍,两者最远相距C-1,所以slow不可能走的距离超过一圈

即为L距离就等于meet在环中转x-1圈,再走C-N,所以说meet和head的相遇点一定是链表入环的第一个节点。

题目三:138. 随机链表的复制 - 力扣(LeetCode)

这道题目,也是考察单链表,但是有意思的是链表的每个节点有一个random指针,只想链表中的任意节点或者是空指针。

以我们现在知识水平,用c来写有点复杂,但是我们有一个比较简单的方法:

遍历原链表,复制链表的每一个节点,并且尾插到链表对应节点的后面,然后在完成对应的操作,最后把复制的节点拿下来组成一个新的链表。

链表复制,并且尾插到对应节点的后面,这个操作我们之前讲过,也写过好多遍了,不再赘述,但是random指针该如何控制呢?

确实,这道题目的难点就是random指针的指向,但是我们这个方法完美的解决了这个难题,为什么呢?如下图所示:

我们怎么控制节点一的random指针呢?

只就是这个方法的巧妙之处,只需用一行代码,便可轻松的控制复制节点的random指针的指向。

代码如下:

控制random指针时要注意:若对应节点的random指针指向空,那么复制节点的random指针也指向空即可。

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

这道题目,看似难度是困难,其实就是一个纸老虎罢了。这道题目无非就是把我们之前讲的题目糅合在一起,形成了一个新的题目。

我们来一步一步的拆分这道题目:

判断链表是否有回文结构,也就是判断链表节点的值是否左右对称。

如上图所示,这两个链表都是回文链表,那么该怎么判断一个链表是不是回文链表呢?

首先,回文链表是对称的,所以我们要先找到中间节点,并返回链表的中间节点。

然后,我们在以中间节点mid为头结点,把从mid往后的链表进行反转。

进行这两步后,链表变成了这个样子,这时我们在分别从phead,mid开始遍历链表,对比两者节点的值,如果相等,就是回文链表,如果不相等,就不是回文链表。

这时又小伙伴可能会问:上图第二个例子,当phead指向第二个节点时,mid指向倒数第二个节点,那么phead->next指向哪一个节点呢?这个我们要回想我们之前讲过的反转链表的实现过程,它的指向如下图所示:

所以说,我们的思路没有问题,代码如下图所示:

这段代码看似很长,但其实思路并不难以理解,就是把一道题目分成了我们之前讲过的一道道的小题目。只要熟练掌握了我们上篇文章讲解的题目,那么这道题目就非常容易了。

至此,我们链表的经典面试题已完结,希望读者能从这两篇文章中有所收获。

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

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

相关文章

为什么选择OpenNJet?OpenNJet下一代云原生应用引擎!OpenNJet开发实战!

前言导读 在当今这个数字化转型加速的时代,云原生技术已成为企业和开发者构建现代应用的首选路径。OpenNJet作为新一代云原生应用引擎,在国内外技术社区受到了广泛关注。 本文将深入探讨OpenNJet的特点、优势以及在开发实践中的应用,带您全…

Java 笔记 13:Java 数组内容,数组的声明、创建、初始化、赋值等,以及内存分析

一、前言 记录时间 [2024-05-03] 系列文章简摘: Java 笔记 01:Java 概述,MarkDown 常用语法整理 Java 笔记 02:Java 开发环境的搭建,IDEA / Notepad / JDK 安装及环境配置,编写第一个 Java 程序 Java 笔记 …

C++ | Date 日期类详解

目录 简介 日期类总代码 | Date 类的定义 & 构造 & Print 类的定义 构造函数 & Print 比较类&#xff0c;如<、>、<...... 值加减类&#xff0c;如、-、、-...... 加减类具体分类 判断某个月有多少天 GetMonthDay 日期类 / &#xff08;- / -&…

场景文本检测识别学习 day08(无监督的Loss Function、代理任务)

无监督的Loss Function&#xff08;无监督的目标函数&#xff09; 根据有无标签&#xff0c;可以将模型的学习方法分为&#xff1a;无监督、有监督两种。而自监督是无监督的一种无监督的目标函数可以分为以下几种&#xff1a; 生成式网络的做法&#xff0c;衡量模型的输出和固…

protobuf在配置文件管理上的应用

TextFormat::ParseFromString 是 Google Protocol Buffers&#xff08;通常简称为 Protobuf&#xff09;库中的一个函数&#xff0c;用于从文本格式解析消息。Protobuf 是一种用于序列化结构化数据的库&#xff0c;它允许你定义数据的结构&#xff0c;然后自动生成源代码来处理…

【实用推荐】7个靠谱赚钱软件,宅家也能轻松赚钱!

在数字化浪潮下&#xff0c;如何在家轻松赚取收益成为许多人关注的焦点。软件市场的蓬勃发展为我们提供了多种选择&#xff0c;但面对琳琅满目的赚钱应用&#xff0c;许多人感到无从下手&#xff0c;担心选择不当。本文将为您揭示这些软件背后的奥秘&#xff0c;助您找到最适合…

【副本向】高等级副本全流程开发

副本的创建 1.从配置表通过副本ID获取此副本参数 Tab_CopyScene rCopyScene TableManager.GetCopySceneByID(m_CopySceneID);if (rCopyScene ! null){//只要配置了组队的Rule&#xff0c;就是组队模式&#xff0c;否则就是单人模式bool bSolo true;for (int n 0; n < rCo…

禅道项目管理系统 身份验证漏洞分析QVD-2024-15263

前言 最近不怎么更新了&#xff01;向小伙伴说明下 我不是什么组织 更不什么经销号&#xff08;尽管csdn有很多经销广告号&#xff09; 一确实是下岗了&#xff01;忙着为找工作而发愁。简历都投出去如同石沉大海能不愁吗!.哎...... 二是忙着论文及材料的事...…

观察者模式实战:解密最热门的设计模式之一

文章目录 前言一、什么是观察者模式二、Java实现观察者模式2.1 观察者接口2.2 具体观察者2.3 基础发布者2.4 具体发布者2.5 消息发送 三、Spring实现观察者模式3.1 定义事件类3.2 具体观察者3.3 具体发布者3.4 消息发送 总结 前言 随着系统的复杂度变高&#xff0c;我们就会采…

电商独立站最重要的功能设置:多语言转换和代运系统搭建

什么是独立站&#xff1f; 多语言模式切换 1 搭建电商独立站在我看来最简单的理解&#xff0c;就是独立的网站。 如果你在跨境圈子呆了一段时间&#xff0c;独立站是一个避不开且火热的一个词&#xff0c;并且也是所有的B2B、B2C商家都在运营和布局的市场。 独立站的优势有哪…

AI视频教程下载:零代码创建AI智能体、AI Agents和ChatGPT的Gpts

这门课程专注于提示工程的掌握&#xff0c;教你以精确的方式引导GPT&#xff0c;利用它们的生成能力产生卓越的AI驱动结果。一步一步地&#xff0c;你将学会创建多样化的GPT军团——每个都设计来满足特定的专业需求。 从提供个性化职业变更指导的职业教练AI&#xff0c;到以惊…

精准测试-Vue前端调用链影响变更分析之一

Vue前端调用链影响变更分析之一 一、背景二、工具调研1、 工具介绍&#xff1a;2、工具使用 三、工具落地集成方案&#xff08;待后续补充&#xff09;变更影响较为简单的实现变更影响较为复杂的实现1、全局关系数据库的构建2、变更影响的简单实现3、变更影响的复杂实现 一、背…

【LinuxC语言】系统日志

文章目录 前言一、系统日志的介绍二、向系统日志写入日志信息三、示例代码总结 前言 在Linux系统中&#xff0c;系统日志对于监控和排查系统问题至关重要。它记录了系统的运行状态、各种事件和错误信息&#xff0c;帮助系统管理员和开发人员追踪问题、进行故障排除以及优化系统…

(Microsoft SQL Server,错误: 233)

错误信息: A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程。) (Microsoft SQL Server&#xff0c;错误: 233) 原因&…

《十三》QT绘图原理双缓冲机制

一、原理与设计 所谓双缓冲机制&#xff0c;是指在绘制控件时&#xff0c;首先将要绘制的内容绘制在一个图片中&#xff0c;再将图片一次性地绘制到控件上。在早期的 Qt 版本中&#xff0c;若直接在控件上进行绘制工作&#xff0c;则在控件重绘时会产生闪烁地现象&#xff0c;控…

零基础学习数据库SQL语句之定义数据库对象的DDL语句

DDL语句 DDL Date Definition Language 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09; 基本操作 数据库操作 查询所有数据库 SHOW DATEBASES查询当前数据库 SELECT DATEBASE() 创建 CREATE DATEBASE [IF …

利用大语言模型(KIMI)构建智能产品的控制信息模型

数字化的核心是数字化建模&#xff0c;为一个事物构建数字模型是一项十分复杂的工作。不同的应用场景&#xff0c;对事物的关注重点的不同的。例如&#xff0c;对于一个智能传感器而言&#xff0c;从商业的角度看&#xff0c;产品的信息模型中应该包括产品的类型&#xff0c;名…

Mysql的关联查询以及语句

一、mysql的连接查询 1、等值连接 这里是三张表的等值连接 select rp.role_id,rp.permission_id from role_permission rp, role r, permission p where rp.role_idr.id and rp.permission_idp.id 2、内连接&#xff1a; 角色&#xff1a;系统管理员 是否拥有权限&#xf…

DHCPv4_CLIENT_ALLOCATING_03: 发送DHCPREQUEST - 必须包含‘服务器标识符‘

测试目的&#xff1a; 验证客户端发送的DHCPREQUEST消息中是否包含“服务器标识符”选项&#xff0c;以指示它选择的服务器。 描述&#xff1a; 本测试用例旨在确保DHCP客户端在广播DHCPREQUEST消息时&#xff0c;必须包含“服务器标识符”选项。该选项用于指明客户端选择了…

2024-5-1我把QQ群聊天记录分析工具重写了一下

【下载地址】 https://www.lanzoub.com/b00rn0g47e 密码:9hww 【项目背景】 2020年我用Tkinter写过一个QQ群聊天记录分析的工具exe&#xff0c;后续也写过一个纯JS前端的版本&#xff0c;前阵子有个用户反馈不能用了&#xff0c;顺便看能不能加入一个分析关键词的功能&…