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

【剑指offer|图解|链表】链表的中间结点 + 链表中倒数第k个结点

在这里插入图片描述
🌈个人主页:聆风吟
🔥系列专栏:数据结构、算法模板
🔖少年有梦不应止于心动,更要付诸行动。


文章目录

  • 📋前言
  • 一. ⛳️链表的中间结点
  • 二. ⛳️链表中倒数第k个结点
  • 📝结语

📋前言

    💬 hello! 小伙伴们大家好哇,今天作者给大家带来的是链表的相关面试题的讲解,在学习了下文之后,相信大家可以更好的理解链表,并且我们同过本文的练习相信大家对快慢双指针也将会有一定的了解。
    📚 系列专栏:本期文章收录在《剑指offer每日一练》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
    🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝!



一. ⛳️链表的中间结点

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

题目:
给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例:

输入: head = [1,2,3,4,5]
输出: [3,4,5]
解释: 链表只有一个中间结点,值为 3

限制:

  • 链表的结点数范围是 [1, 100]
  • 1 <= Node.val <= 100

解题思路:
暴力求解(不推荐)
拿到本题我们很容易想到一种方法就是:遍历整个链表,记录整个链表的元素个数count,然后求出中间结点的位数cout/2 + 1,最后从头开始遍历链表到cout/2 + 1位置的结点,返回该结点即可。显然该方法是比较慢的,那么有没有更好的方法呢?当然是有的,我们可以借助快慢双指针进行快速求解。

快慢双指针(推荐)
创建快慢双指针 slowfast 分别指向链表的头部,循环执行:

  • 快指针 fast 每轮走两步
  • 慢指针 slow 每轮走一步

这样 fast 的步数恒为 slow 的 2 倍,因此当快指针遍历完链表时,慢指针就指向链表中间节点。而由于长度为偶数的链表有两个中间节点,因此需要分两种情况考虑:

  • 链表的长度为奇数:当 fast 走到链表的尾结点时,slow 正好是中间结点;
  • 链表的长度为偶数:当 fast 为空(越过尾结点)时,slow 正好走到第二个中间结点。

在这里插入图片描述
总结以上规律,应在当 fast 遇到或越过尾节点时跳出循环,并返回 slow 即可。

示例动图展示:在这里插入图片描述

c代码:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* middleNode(struct ListNode* head) {//创建快慢指针struct ListNode* slow = head, *fast = head;//循环执行while(fast && fast->next){slow = slow->next;fast = fast->next->next;}//返回中间结点return slow;
}


二. ⛳️链表中倒数第k个结点

⌈ 在线OJ链接,可以转至此处自行练习 ⌋

题目:
输入一个链表,输出该链表中倒数第k个结点。

示例:

输入: 1,{1,2,3,4,5}
输出: {5}

解题思路:
快慢双指针
学习了上题相信大家对快慢双指针已经有了一定了解。本题我们可以先创建快慢双指针 slowfast 分别指向链表的头部:

  1. 先让快指针fast 先向后走k 步;
    注意:当fast向后走的过程中,fast提前为空,说明链表的长度没有 k 大,需要终止程序,返回结果NULL。
  2. 然后快指针fast 和慢指针slow 一起循环向后走;
  3. 直到fast为空时终止循环,返回slow即可。

示例动图展示:在这里插入图片描述

c代码:

/*** struct ListNode {*	int val;*	struct ListNode *next;* };*//*** * @param pListHead ListNode类 * @param k int整型 * @return ListNode类*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code here//创建快慢双指针 slow 和 fast 分别指向链表的头部struct ListNode* slow = pListHead, *fast = pListHead;//先让快指针fast 先向后走 k 步for(int i = 0; i < k; i++){//如果fast提前为空,需要终止程序,返回结果NULLif(fast == NULL){return NULL;}fast = fast->next;}//快指针fast 和慢指针slow 一起循环向后走//fast为空时终止循环while(fast){slow = slow->next;fast = fast->next;}//返回return slow;
}


📝结语

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,聆风吟的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是作者前进的最大动力!
在这里插入图片描述

相关文章:

【剑指offer|图解|链表】链表的中间结点 + 链表中倒数第k个结点

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️链表的中间结点二. ⛳️链表中倒数第k个结点&#x1f4dd;结语 &#x1f4c…...

被环境变量虐过一遍获得的启示

Oracle数据库环境存在两个数据库版本12C及19C&#xff0c;在执行一些操作时需要设置对应版本的环境变量 计划登录12C环境&#xff0c;于是按如下方式设置环境变量 export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_HOME/product/12.2.0/dbhome_1 export ORACLE_S…...

关于Hbase的一些问题

HBase 1. RowKey如何设计&#xff0c;设计不好会产生什么后果 唯一原则&#xff1a;在设计上要保持RowKey的唯一性。 因为HBase中的数据是以KV的格式来存储的&#xff0c;所以如果向同一张表中插入RowKey相同的数据&#xff0c;旧的数据会被覆盖掉。 长度原则&#xff1a;建…...

level=warning msg=“failed to retrieve runc version: signal: segmentation fault“

安装docker启动后&#xff0c;发现里面没有runc版本信息 目前看是少了runc组件 那我们安装runc https://github.com/opencontainers/runc/releases/download/v1.1.10/runc.amd64 [rootlocalhost ~]# mv runc.amd64 /usr/bin/runc mv&#xff1a;是否覆盖"/usr/bin/runc&q…...

电力工作记录仪、智能安全帽、智能布控球助力智能电网建设

电力行业的建设和发展是国家经济发展的重要支撑&#xff0c;而智能电网作为电力系统的重要组成部分&#xff0c;它的安全高效运行关乎到整个电力系统乃至民生的稳定和安全。为了加快国家经济的发展以及满足人们对电力的需求和用电可靠性的要求&#xff0c;国家早在十二规划中就…...

【CSS】各百分比透明度 opacity 对应的 16 进制颜色值(例如:#FFFFFF80)

文章目录 使用&#xff1a;6位颜色值2位透明度值 color: #000000D4; /* 等价于 */ color: #000000; opacity : 0.83; /* 等价于 */ color: #000000; opacity : 83%; 对照表&#xff08;0&#xff1a;完全透明&#xff0c;1&#xff1a;不透明&#xff09; 透明度值百分百值十…...

有依次对应关系的数组X、Y、Z,如何排序其中一个X数组,使得另外的数组还与排序完成后的数组相对应(C语言实现)

1. 目的 有依次对应关系的数组X、Y、Z&#xff0c;排序其中一个X数组&#xff0c;使得另外的数组还与排序完成后的数组相对应&#xff0c;并打印出排序完成后的X、Y、Z数组。 2. 具体实现 以下面的这个对应关系为例&#xff0c;进行相应编程实现。 X [3.7,7.7,-6.6,1.5,-4.5…...

Mysql之聚合函数

Mysql之聚合函数 什么是聚合函数常见的聚合函数GROUP BYWITH ROLLUPHAVINGHAVING与WHERE的对比 总结SQL底层原理 什么是聚合函数 对一组数据进行汇总的函数&#xff0c;但是还是返回一个结果 聚合函数也叫聚集&#xff0c;分组函数 常见的聚合函数 1.AVG(): 求平均值 2.SUM() :…...

Flutter笔记:拖拽手势

Flutter笔记 拖拽手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485123 目 录 1. 概述2. 垂直拖…...

软件运维面试题

文章目录 面试题如销售签有一外地客户&#xff0c;要求实施人员在客户现场一周内完成所有项目实施&#xff0c;而标准实施一般为期一个月&#xff0c;针对以上情况实施人员应该如何应对?答案 当你觉得工作的付出和你的收入不成正比的时候你会怎么做&#xff1f;答案 在你进行实…...

代码随想录算法训练营第23期day53|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

目录 一、1143.最长公共子序列 二、1035.不相交的线 三、53. 最大子序和 一、1143.最长公共子序列 力扣题目链接 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int…...

MySQL 的执行原理(五)

5.6 再深入查询优化 5.6.1. 全局考虑性能优化 5.6.3.1. 为什么查询速度会慢 在尝试编写快速的查询之前&#xff0c;需要清楚一点&#xff0c;真正重要是响应时间。如果把查询看作是一个任务&#xff0c;那么它由一系列子任务组成&#xff0c;每个子任务都会消耗一定的时间。…...

如何快速将txt类型的日志文件转换为excel表格并进行数据分析报表统计图(如:饼图、折线图、柱状图)?

打开excel创建空白文档 选择一个txt文件 一动下面箭头↑竖线&#xff0c;可以拖拽左右调整要判断转换为一列的数据宽度 根据情况设置不同列的数据格式&#xff08;每一列可以点击&#xff09;&#xff0c;设置好后点击【完成】 设置单元格数据格式 手动插入第一行为每列数据的…...

内网穿透的应用-如何在Docker中部署MinIO服务并结合内网穿透实现公网访问本地管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…...

关于Unity自带的保存简单且持久化数据PlayerPrefs类的使用

Unity的PlayerPrefs类是用于在游戏中保存和读取玩家偏好设置或其他简单数据的工具。它提供了一种简单的键值对存储方式&#xff0c;可以在游戏中持久化保存数据。 PlayerPrefs提供了三种类型的数据的处理&#xff1a;分别是int,float,string。 具体使用方法如下&#xff1a; …...

力扣贪心——跳跃游戏I和II

1 跳跃游戏 利用边界进行判断&#xff0c;核心就是判定边界&#xff0c;边界内所有步数一定是最小的&#xff0c;然后在这个边界里找能到达的最远地方。 1.1 跳跃游戏I class Solution {public boolean canJump(int[] nums) {int len nums.length;int maxDistance 0;int te…...

【SA8295P 源码分析 (三)】132 - GMSL2 协议分析 之 GPIO/SPI/I2C/UART 等通迅控制协议带宽消耗计算

【SA8295P 源码分析】132 - GMSL2 协议分析 之 GPIO/SPI/I2C/UART 等通迅控制协议带宽消耗计算 一、GPIO 透传带宽消耗计算二、SPI 通迅带宽消耗计算三、I2C 通迅带宽消耗计算四、UART 通迅带宽消耗计算系列文章汇总见:《【SA8295P 源码分析 (三)】Camera 模块 文章链接汇总 -…...

毕业论文GPT说:

作为一个计算机专业的大四学生&#xff0c;学过英语&#xff0c;微积分&#xff0c;离散数学&#xff0c;概率论与数理统计&#xff0c;线性代数&#xff0c;具体数学&#xff0c;数论&#xff0c;C语言&#xff0c;汇编语言&#xff0c;在网格机算、数据科学、机器学习与智能工…...

Week-T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强&#xff08;增加数据集中样本的多样性&#xff09;三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…...

史上最全!PMP实用应试技巧汇总!

PMP&#xff08;Project Management Professional 项目管理专业人士资格认证&#xff0c;由全球最大的项目管理专业组织机构——美国PMI发起&#xff0c;目的是用来严格评估管理项目人员知识技能是否具有高品质的资格认证考试。给大家带来关于PMP考试的实用应试技巧。 PMP解题…...

CANN/ge SetInitParam函数文档

SetInitParam 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTorch、TensorFlow 前…...

CANN/asc-tools NPU检查工具

npu_check 【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools 概述 Ascend C Tools提供的孪生调试分为debug功能和npu check功能&#xff0c;debug功能包含诸如是否合法使用…...

终极指南:如何用NHSE免费掌控你的动物森友会游戏体验 [特殊字符]

终极指南&#xff1a;如何用NHSE免费掌控你的动物森友会游戏体验 &#x1f3ae; 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 你是否曾为《动物森友会》中的资源收集而烦恼&#xff1f;是否梦想…...

ncmdumpGUI终极指南:免费解锁网易云音乐加密文件

ncmdumpGUI终极指南&#xff1a;免费解锁网易云音乐加密文件 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾在网易云音乐下载了心爱的歌曲&#xff0…...

GitSavvy快捷键配置终极指南:提升Git操作效率的10个技巧

GitSavvy快捷键配置终极指南&#xff1a;提升Git操作效率的10个技巧 【免费下载链接】GitSavvy Full git and GitHub integration with Sublime Text 项目地址: https://gitcode.com/gh_mirrors/gi/GitSavvy GitSavvy是Sublime Text编辑器中最强大的Git集成插件之一&…...

Qoder-Free:开源本地化代码生成工具部署与实战指南

1. 项目概述&#xff1a;一个免费、开源的代码生成器最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫“Qoder-Free”。光看名字&#xff0c;大概能猜到它和代码生成有关&#xff0c;而且主打“免费”。点进去一看&#xff0c;果然&#xff0c;这是一个由…...

AI代码质量守护:eslint-plugin-ai-guard 插件实战指南

1. 项目概述&#xff1a;为什么我们需要一个专为AI代码“体检”的ESLint插件&#xff1f; 如果你和我一样&#xff0c;在日常开发中已经离不开GitHub Copilot、Cursor或者Claude Code这类AI编程助手&#xff0c;那你肯定也经历过那种“哭笑不得”的时刻&#xff1a;AI生成的代…...

Polityka prywatności aplikacji Kaltmann Gen

Oprogramowanie szanuje i chroni prywatność wszystkich użytkownikw oraz nie gromadzi żadnych danych osobowych.W przypadku wprowadzenia zmian w polityce prywatności zmiany te zostaną opublikowane w niniejszej polityce oraz w innych odpowiednich miejsca…...

AGI技术突破:从静态模型到持续学习的八大核心方向

1. 当前技术路径的局限性分析过去十年间&#xff0c;基于神经网络和Transformer架构的大规模自监督预训练模型取得了显著进展。这些系统在模式识别、文本生成等任务上展现出惊人能力&#xff0c;但其核心机制仍存在根本性缺陷。当前主流模型本质上仍是静态的关联引擎——它们通…...

AI模型基准测试实战:为创业者量身定制的智能体选型指南

1. 项目概述&#xff1a;为创业者量身定制的AI模型基准测试 如果你正在用OpenClaw、N8N或Hermes这类AI Agent工具来构建自己的自动化业务流程&#xff0c;那你肯定遇到过这个核心问题&#xff1a; 到底该选哪个AI模型&#xff1f; 是选价格便宜但能力未知的&#xff0c;还是…...