链表经典面试题下

目录

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

题目一: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指向哪一个节点呢?这个我们要回想我们之前讲过的反转链表的实现过程,它的指向如下图所示:

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

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

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

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

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

相关文章

java 学习二

java字面量 java变量 注意事项 十进制转二进制 计算机中表示数据的最小单元 java中的数据类型 java中的类型转换 表达式的自动类型转换 强制类型转换

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

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

【Python文字识别】基于HyperLPR3实现车牌检测和识别(Python版本快速部署)

闲来无事,想复现一下网上的基于YOLO v5的单目测距算法。然后就突然想在这个场景下搞一下车牌识别,于是就有了这篇文章。今天就给大家分享基于HyperLPR3实现车牌检测和识别。 原创作者:RS迷途小书童 博客地址:https://blog.csdn.ne…

数据挖掘实战-基于CNN深度学习算法构建英文文本分类模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

阿里云API网关 产品的使用笔记

阿里云的产品虽多,还是一如既往的一用一个看不懂,该模块的文档依旧保持“稳定”发挥,磕了半天才全部跑通。 用阿里云API网关的原因是,在Agent中写插件调用API的时候,需要使用Https协议,又嫌搞备案、证书等事…

2024五一数学建模A题思路代码与论文分析

2024五一数学建模A题完整代码和成品论文获取↓↓↓↓↓ https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upvkv6nx?singleDoc# 2024五一数学建模A题钢板最优切割路径问题需要建立的模型和算法: 图论 最短路径算法(Dijkstra算法、Floyd算法等) 动态规划 网格化离散建模 …

链表的带环问题 链表的深度拷贝

1.1. 链表是否带环 代码很简单,最主要就是如何证明 首先判断链表是否带环,可以定义两个指针,一个快指针一个慢指针。快指针走两步,慢指针走一步一定会相遇吗?有没有可能会超过?假设进环的时候fast和slow的…

【翻译】REST API

自动伸缩 API 创建或更新自动伸缩策略 API 此特性设计用于 Elasticsearch Service、Elastic Cloud Enterprise 和 Kubernetes 上的 Elastic Cloud 的间接使用。不支持直接用户使用。 创建或更新一个自动伸缩策略。 请求 PUT /_autoscaling/policy/<name> {"rol…

【大模型学习】私有大模型部署(基础知识)

私有大模型 优点 保护内部隐私 缺点 成本昂贵 难以共享 难以更新 大模型底座 基础知识点 知识库 知识库是什么&#xff1f; 知识库的作用是什么&#xff1f; 微调 增强大模型的推理能力 AI Agent 代理&#xff0c;与内部大模型进行交互 开源 and 闭源 是否可以查…

40 生产者消费者模型

生产者消费者模型 概念 为何要使用生产者消费者模型&#xff0c;这个是用过一个容器解决生产者和消费的强耦合问题。生产者和消费者之间不需要通讯&#xff0c;通过阻塞队列通讯&#xff0c;所以生产者生产完数据之后不用等待消费者处理&#xff0c;直接扔给阻塞队列&#xf…

ue引擎游戏开发笔记(28)——实现第三人称越肩视角

1.需求分析 实现一个第三人称越肩视角 2.操作实现 1.思路&#xff1a;建立一个弹簧臂和摄像机&#xff0c;调整两者位置达到越肩效果。 2.直接在蓝图操作&#xff1a;添加摄像机和弹簧臂&#xff1a; 3.对弹簧臂勾选使用pawn控制旋转&#xff0c;并适当调整摄像机和弹簧臂位置…

Flask表单详解

Flask表单详解 概述跨站请求伪造保护表单类把表单渲染成HTML在视图函数中处理表单重定向和用户会话Flash消息 概述 尽管 Flask 的请求对象提供的信息足够用于处理 Web 表单&#xff0c;但有些任务很单调&#xff0c;而且要重复操作。比如&#xff0c;生成表单的 HTML 代码和验…

在智慧城市的建设中智能车载监控录像机发挥什么作用

引言 随着科技的快速发展&#xff0c;智慧城市的概念逐渐深入人心。在智慧城市的建设中&#xff0c;智能车载监控录像机作为一种重要的技术工具&#xff0c;发挥着越来越重要的作用。本文将从多个方面探讨智能车载监控录像机在智慧城市建设中的作用。 一、智能车载监控录像机概…

计算机视觉大项目(1)-水果分级系统

项目来源&#xff1a;河北大学计算机视觉课程-杨老师. 一共有四个标题&#xff0c;本篇博客只完成前两问。 目录 实验目的: 实验内容&#xff1a; 实验步骤&#xff1a; 1.水果图像的分割 >掩膜图像Mask 是什么&#xff1f; >改进:去除反光部分的影响 2&#xf…

npm install digital envelope routines::unsupported解决方法

目录 一、问题描述二、问题原因三、解决方法 一、问题描述 执行命令 npm install 报错&#xff1a;digital envelope routines::unsupported 二、问题原因 Node.js 17 版本引入了 OpenSSL 3.0&#xff0c;它在算法和密钥大小方面实施了更为严格的限制。这一变化导致 npm 的升…

excel怎么删除条件格式规则但保留格式?

这个问题的意思就是要将设置的条件格式&#xff0c;转换成单元格格式。除了使用VBA代码将格式转换外&#xff0c;还可以用excel自己的功能来完成这个任务。 一、将条件格式“留下来” 1.设置条件格式 选中数据&#xff0c;点击开始选项卡&#xff0c;设置条件格式&#xff0…

Qt绘图与图形视图之移动鼠标手动绘制任意多边形的简单介绍

往期回顾 【QT进阶】Qt线程与并发之QtConcurrent返回值与run方法的参数说明-CSDN博客 Qt绘图与图形视图之绘图技术知识点的简单介绍-CSDN博客 Qt绘图与图形视图之常见图形、路径、文字、图片的绘制介绍-CSDN博客 Qt绘图与图形视图之移动鼠标手动绘制任意多边形的简单介绍 一、…

【深度学习】第一门课 神经网络和深度学习 Week 4 深层神经网络

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;深度学习 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对…

临期食品店会员配送商城小程序的作用是什么

临期商品以量大价格低/即时性吸引市场大量客户&#xff0c;很多地区都有门店&#xff0c;行业也不乏连锁/加盟品牌&#xff0c;食品受众广且区域拓展性强&#xff0c;商家可线上销售提升营收和解决线下难题。 商家运用【雨科】平台搭建临期食品店商城小程序&#xff0c;对生意…

PyTorch如何修改模型(魔改)

文章目录 PyTorch如何修改模型&#xff08;魔改&#xff09;1.修改模型层(模型框架⭐)1.1通过继承修改模型1.2通过组合修改模型(重点学&#x1f440;)1.3通过猴子补丁修改模型 2.添加外部输入3.添加额外输出参考 PyTorch如何修改模型&#xff08;魔改&#xff09; 对模型缝缝补…