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

news2024/11/24 23:09:56

目录

一、前言

二、题目描述 

三、解题方法

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

🥝 什么是哨兵位头节点?  

🍍 案例图解  

四、总结与提炼 

五、共勉 


一、前言

      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.coloradmin.cn/o/1834285.html

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

相关文章

Java内存模型(JMM)详解

文章目录 1、Java内存模型2、JMM的核心概念1&#xff09;主内存与工作内存2&#xff09;内存可见性3&#xff09;JMM的三大特性&#xff1a;原子性、可见性、有序性。 3、JMM中的八种操作4、Happens-before 规则5、样例&#xff1a; 1、Java内存模型 Java内存模型&#xff08;…

电脑文件防泄密软件——天锐绿盾 - 中科数安—— 哪个好

在选择电脑文件防泄密软件时&#xff0c;天锐绿盾和中科数安都是值得考虑的选项。以下是对这两款软件的详细比较&#xff1a; www.drhchina.com PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 功能全面性&#xff1a; 天锐…

QT工作笔记

文章目录 QDialog的accept()和reject()介绍QPushButton提示属性样式表QComboBox QDialog的accept()和reject()介绍 accept() 和reject() 这两个槽函数都会和close() 一样关闭dialogaccept() 关闭后 返回了Dialog::Acceptedreject() 关闭后 返回了Dialog::Rejected这样当我们需…

SpringBoot修改banner

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

ES升级--03-- IK分词器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 IK分词器1. IK分词器 下载https://github.com/infinilabs/analysis-ik/releases 2. 创建文件夹 analysis-ik3.把zip包放至该目录下 解压4. 删除zip包5、重启Elastic…

阿赵UE引擎C++编程学习笔记——C++自定义蓝图函数

大家好&#xff0c;我是阿赵。   使用UE引擎&#xff0c;大部分功能都可以使用蓝图的自带节点去完成。但有时候我们也需要扩展一些蓝图没有的功能。这一篇主要学习一下怎样用C给蓝图新增自定义的函数节点。 一、 新建蓝图函数库 在添加C类的时候&#xff0c;选择蓝图函数库&…

大数据的力量:推动战略决策和业务转型

在当前全球化的时代背景下&#xff0c;国际间的联系日益紧密&#xff0c;世界变得更加互联互通。面对各种危机&#xff0c;数据驱动决策和分析显得愈发重要。从医学研究到市场趋势分析&#xff0c;大数据技术在各个领域发挥着关键作用&#xff0c;推动着一场深刻的变革浪潮。 大…

初识数据库及Mysql安装管理

初识数据库及Mysql安装管理 了解数据库数据库的概念数据库的分类关系型数据库&#xff08;SQL&#xff09;非关系型的数据库&#xff08;NoSQL&#xff09; SQL语句SQL语言分类&#xff1a; MySQL中6种常见的约束&#xff1a; Mysql安装&#xff08;CentOS7&#xff09;源码编译…

mybatis中resultMap和resultType的区别

总结 基本映射 &#xff1a;&#xff08;resultType&#xff09;使用resultType进行输出映射&#xff0c;只有查询出来的列名和pojo中的属性名一致&#xff0c;该列才可以映射成功。&#xff08;数据库&#xff0c;实体&#xff0c;查询字段,这些全部都得一一对应&#xff09;…

gridview自带编辑功能如何判断用户修改的值的合法性

在使用GridView的编辑功能更新值时&#xff0c;确保输入的值合法性是十分重要的。为了实现这一点&#xff0c;你可以在GridView的RowUpdating事件中加入代码来检查用户输入的值。如果发现输入的值不合法&#xff0c;你可以取消更新操作并向用户显示错误消息。下面是如何实现的步…

ESP8266-01S烧录MQTT固件ERROR问题

今天在烧录ESP8266固件时遇到了这个问题&#xff0c;技术客服给了个有效的解决方案。 选择固件的时候可以先确认自己的模块是ESP8266或者EPS8285主控&#xff0c;这在选择DOWNLOADTOOL时还不一样。 然后波特率是115200&#xff0c;我在这个地方选错成1152000。 当然上面都不…

Proxy和definedProperty

1. Proxy 代理 定义: 用于定义基本操作的自定义行为 Proxy修改的是程序默认形为&#xff0c;就形同于在编程语言层面上做修改&#xff0c;属于元编程 元编程 是指某类计算机程序的编写&#xff0c;这类计算机程序编写或者操纵其它程序&#xff08;或者自身&#xff09;作为它…

Python 引入中文py文件

目录 背景 思路 importlib介绍 使用方法 1.导入内置库 importlib.util 2.创建模块规格对象 spec importlib.util.spec_from_file_location("example_module", "example.py") 3.创建模块对象 module importlib.util.module_from_spec(spec) …

全国产城市轨道交通运营公安AI高清视频监控系统

方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求&#xff0c;选用华维视讯的各类前端和视频编解码、控制产品&#xff0c;通过统一平台提供视频监控服务和智能应用&#xff0c;满足轨道交通运营业主客运组织和抢险指挥的需求&#xff…

electron自定义标题栏的最大化,最小化,关闭窗口

渲染组件代码&#xff1a; <template><div class"window-btn"><i class"minimize" click"minimize"><img src"../assets/img/最小化.svg" alt"最小化" /></i><i v-if"!isMaximized&…

【YOLO模型训练时,减小批次大小(Batch Size)可能会加快训练速度】

文章目录 1.在使用YOLOv8进行目标检测模型训练时&#xff0c;减小批次大小&#xff08;Batch Size&#xff09;可能会加快训练速度。2. 这种现象主要与以下几个因素有关&#xff1a;1.显存限制&#xff08;GPU Memory Constraints&#xff09;&#xff1a;2.梯度累积&#xff0…

项目学习---Javaweb(超市订单管理系统)

知识点 MVC模型: 实现步骤:分为3级 1.M(Model) 持久层 代码与数据库进行交互的代码(Mybatis-dao层) 2.C(Control) 控制层 完成某项业务的具体操作过程(Controller层----Service层) 3.V(View) 视图层 一般指用户看到的内容(页面) 项目目录 .filter //过滤器 解决中文字符集…

C#——文件读取FileStream类详情

文件读取FileStream类 一个文件进行读写的时候&#xff0c;会变成一个文件流 FileStream类输入流 用于从文件进行读取文件。输出流&#xff0c;向文件写入的操作 FilleStream用于文件当中任何位置的读写 此文章借鉴与&#xff1a;C#教程&#xff08;非常详细&#xff09; Fil…

Geek新鲜事15: Linus Torvalds 发话了,新调度器sched_ext将合入Linux6.11

“ext”对应的英文单词为“extensible”&#xff0c;意为可扩展的。开发者Tejun Heo通过整整30 个的patchs&#xff0c;提供了一个支持eBPF程序修改调度策略的调度类。其核心目的有三个&#xff1a; 让开发者更易于实验和探索新的调度策略&#xff0c;免去编译完整内核镜像的成…

mediasoup源码分析(三)channel创建及信令交互

mediasoup源码分析--channel创建及信令交互 概述跨职能图业务流程图代码剖析 概述 在golang实现mediasoup的tcp服务及channel通道一文中&#xff0c;已经介绍过信令服务中tcp和channel的创建&#xff0c;本文主要讲解c中mediasoup的channel创建&#xff0c;以及信令服务和medi…