【算法专题--链表】K个一组翻转链表 -- 高频面试题(图文详解,小白一看就懂!!!)

目录

一、前言

二、题目描述 

三、解题方法

⭐双指针 -- 采用哨兵位头节点

🥝 什么是哨兵位头节点?  

🍍 案例图解  

四、总结与提炼 

五、共勉 


一、前言

      K个一组翻转链表 这道题,可以说是--链表专题--,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
      本片博客就来详细的讲讲解一下
K个一组翻转链表 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

题目连接:25. K 个一组翻转链表 - 力扣(LeetCode)

三、解题方法

⭐双指针 -- 采用哨兵位头节点

🥝 什么是哨兵位头节点?  

首先,先来了解一下什么是  哨兵位---头节点   

  • 它是一个附加的链表结点,该 结点 作为 第一个节点它的数据域不存储任何东西,只是为了操作的方便而引入的。
  • 也就是说,如果一个链表有哨兵节点的话,那么链表表的第一个元素应该是链表的第二个节点。

  哨兵位 --- 头节点的作用:  

  • 比如向链表中插入一个节点,对于没有哨兵位单链表当待插入的节点为链表的第一个节点,由于没有前驱,需要进行特殊处理,从而代码的复杂性增加。 
  • 如果有哨兵位头节点,则第一个节点的处理方式与其它节点相同,可以统一进行处理

 🍍 解题思路  

根据题目要求,我们需要将链表中每 k 个节点翻转。我们先统计链表中的节点数,然后每 k 个节点作为一组,在这一组中进行链表翻转,翻转后我们利用一个节点 p0 将已经翻转的节点和接下来将要翻转的节点沟通起来。

🍍 案例图解  

 链表:【1,2,3,4,5】 

  •  创建 哨兵位头节点 和 双指针,开始遍历整个链表,并统计链表的节点个数 count = 5

  •  在外循环1 中,我们可以根据  反转链表 中讲过的三指针法,先将第一组的链表翻转,接着 更新指针 p0 ,指向第二组链表的头节点,同理可以得到 外循环 2 的结果

 复杂度分析 :

时间复杂度:O ( n ),n 为链表的节点个数

空间复杂度:O ( 1 )


 代码:

class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {// 反转链表(三指针) + 哨兵位// 创建一个哨兵位 初始化为 -1,连接到 head 上ListNode* pre_head = new ListNode(-1,head);ListNode* p0  = pre_head;  // 用于连接反转后的链表// 统计链表有多少个节点int count = 0;ListNode* cur = head;while(cur){cur = cur->next;count++;}// 开始进行分组反转  --     三指针法ListNode* pre = nullptr;cur = head;for(int n = count ; n>=k ; n = n-k){// 反转局部链表,反转 k 个节点for(int i = 0; i < k ; i++){ListNode* nextnode = cur->next;cur->next = pre;pre = cur;cur = nextnode;}// 将反转的节点 和 要反转的的节点沟通起来ListNode* next = p0->next;p0->next->next = cur;p0->next = pre;p0 = next;  }// 返回哨兵位的 下一个节点return pre_head->next;}
};

四、总结与提炼 

        最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 K个一组翻转链表的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 

五、共勉 

        以下就是我对 K个一组翻转链表 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!! 

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

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

相关文章

LeetCode 1789, 6, 138

目录 1789. 员工的直属部门题目链接表要求知识点思路代码 6. Z 字形变换题目链接标签思路代码 138. 随机链表的复制题目链接标签思路代码 1789. 员工的直属部门 题目链接 1789. 员工的直属部门 表 表Employee的字段为employee_id&#xff0c;department_id和primary_flag。…

【开发利器】OpenCV实验大师最新版本又又发布了

最新发布 大家好&#xff0c;OpenCV实验大师 最新发布的安装包已经支持Python3.10了。同时继续支持Python3.8的安装包&#xff0c;OpenCV实验大师工具软件本次从Python3.8升级到Python3.10是为了方便更多基于Python3.10的开发者使用。同时修复了一批软件错误。 安装配置 下载…

SpringBoot修改banner

在resources目录下创建banner.txt文件 到该网站下选择banner https://www.bootschool.net/ascii-art 点击拷贝&#xff1a; 粘贴到banner.txt中&#xff0c;保存 重新运行项目即可&#xff1a;

对 PLC AC 模块的 TRIAC 输出进行故障排除

在大多数离散 PLC 系统中&#xff0c;排除输出设备故障的过程相当简单。如果输出端正常工作&#xff0c;则在“关闭”时应测量 0 V&#xff0c;在“开启”时应测量满源电压。对于数字和继电器输出&#xff0c;情况确实如此。对于由 TRIAC 驱动的 AC 输出也应如此&#xff0c;但…

数据结构预备知识(Java):包装类泛型

1、包装类 1.1 包装类 在Java中&#xff0c;每一个基本数据类型都有一个对应的包装类&#xff1a; 在SE的学习中我们已有过简单了解。 我们可以注意到&#xff0c;除了int类型的包装类为Integer&#xff0c;char类型的包装类为Character外&#xff0c;其余基本类型的包装类均…

远程工作岗位机会

电鸭&#xff1a;​​​​​​https://eleduck.com/?sortnew电鸭社区是具有8年历史的远程工作招聘社区&#xff0c;也是远程办公互联网工作者们的聚集地。在社区&#xff0c;我们进行有价值的话题讨论&#xff0c;也分享远程、外包、零活、兼职、驻场等非主流工作机会。「只工…

llm-大模型落地评测?提供一个领域大模型测评方法

文章目录 前置说明1.领域大模型评估指标1.1.性能指标计算方法1.1.1.F11.1.2.首字响应时间1.1.3.处理效率1.1.4.并发路数1.1.5.正确性1.1.6.完整度1.1.7.相关度1.1.8.有效性 1.2.安全性指标计算方法1.2.1.禁止项内容的统计方式1.2.2.问题项内容占比率的统计方式 1.3.质量指标及计…

启动报错 “lc.exe”已退出,代码为 -1

启动项目时报错 “lc.exe”已退出&#xff0c;代码为 -1&#xff0c;这个原因是项目需要认证的凭证&#xff0c;有两种方法解决 1.手动搜索license&#xff0c;然后删掉即可 2.安装插件 工具->nuget包管理->管理解决方案的nuget包&#xff0c;搜emptylicenses&#xff0c…

使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。

0.引言 在自己学习的过程中可以自己做一个和聊天大模型对话的一个小网站&#xff0c;成就感不亚于人生第一次跑完10km。 1.项目介绍 前端代码&#xff1a;Vue3, MarkDownIT. 后端代码&#xff1a;Python3, Fernet库, OpenAPI, LangChain, Ollama. Ollama 本地模型的部署和管理…

SuperMap iClient3D 11i(2023) SP1 for Cesium 调整

SuperMap iClient3D 11i(2023) SP1 for Cesium 最新版本 下载地址 SuperMap技术资源中心|为您提供全面的在线技术服务 每一次版本升级,都要对代码进行修改调整,都是为了解决功能需求。当然,也为产品做了小白鼠测试,发现bug,优化功能。 由于前端开发使用的是dojo框架,类…

java之sql注入审计

1 基础环境搭建 1.1 mysql数据库搭建 phpStudy是一个PHP调试环境的程序集成包&#xff0c;PHPMysqlApache。 通过phpstduy下载与安装指 定版本的mysql数据库【可以同时下载多个版本&#xff0c;便于应对不对的系统及复现漏洞便捷切换多个版本】 完成下载后&#xff0c;启动…

失眠焦虑?这里有你的心灵疗愈手册

&#x1f343; 亲爱的朋友们&#xff0c;你是否也曾在深夜里辗转反侧&#xff0c;无法入眠&#xff1f;是否也曾因为生活中的琐事而焦虑不安&#xff0c;无法放松心情&#xff1f;在这个快节奏的时代&#xff0c;失眠和焦虑似乎成为了我们生活中难以避免的问题。今天&#xff0…

SpringBoot购物网站

摘要 随着信息技术的高速发展&#xff0c;二十一世纪的网络技术和网络应用正在快速融入人们的生活&#xff0c;并且由于网络服务以及网络应用日渐普及&#xff0c;人们对于现在生活的需求也随之增长&#xff0c;而网上购物的便捷对人们的吸引力越来越大&#xff0c;购物网站可…

ES 8.14 向量搜索优化

参考&#xff1a;https://blog.csdn.net/UbuntuTouch/article/details/139502650 检索器&#xff08;standard、kNN 和 RRF&#xff09; 检索器&#xff08;retrievers&#xff09;是搜索 API 中的一种新抽象概念&#xff0c;用于描述如何检索一组顶级文档。检索器被设计为可以…

【经典爬虫案例】用Python爬取微博热搜榜!

一、爬取目标 本次爬取的是: 微博热搜榜 &#xff08;代码也可直接在下方拿&#xff09;&#xff1a; ​ 分别爬取每条热搜的&#xff1a; 热搜标题、热搜排名、热搜类别、热度、链接地址。 下面&#xff0c;对页面进行分析。 经过分析&#xff0c;此页面没有XHR链接通过&am…

如何覆盖!important修饰的属性

最简单的方法 如果这个!important修饰的属性 是自己的写的&#xff0c;去掉这种写法&#xff0c;使用优先级的方式来写这个属性&#xff08;.outter .inner 的优先级就会比 。outter的优先级高&#xff09; 复杂的方法&#xff1a;用魔法打败魔法 但是这个样式来自于全局css&am…

【机器学习】智能创意工厂:机器学习驱动的AIGC,打造未来内容新生态

&#x1f680;时空传送门 &#x1f50d;机器学习在AIGC中的核心技术&#x1f4d5;深度学习&#x1f388;生成对抗网络&#xff08;GANs&#xff09; &#x1f680;机器学习在AIGC中的具体应用&#x1f340;图像生成与编辑⭐文本生成与对话系统&#x1f320;音频生成与语音合成 …

uniapp小程序计算地图计算距离

我们拿到自身和目标距离经纬度 调用此方法即可计算出自身与目标的距离 最后我所展示的页面如下 具体效果可能会有点偏差 要求严格的可以在精细的计算一下

【Python】Redis数据库

Redis数据库 Unit01一、Redis1.1 概述1.2 安装1.3 Redis-cli1.4 数据类型1.5 字符处理1.6 键的命名规则 二、通用命令三、字符串(String)3.1 概述3.2 常用命令3.3 应用场景 四、列表(List)4.1 概述4.2 常用命令 五、集合(SET)5.1 概述5.3 常用命令 六、有序集合6.1 概述6.2 常用…

【行业应用】基于 Arm 虚拟硬件平台实现微信支付二维码识别的智能闸机系统

基于 Arm 虚拟硬件平台实现微信支付二维码识别的智能闸机系统 本实验过程中所显示的优惠价格及费用报销等相关信息仅在【Arm AI 开发体验创造营】体验活动过程中有效&#xff0c;逾期无效&#xff0c;请根据实时价格自行购买和体验。同时&#xff0c;感谢本次体验活动 Arm 导师…