25. K 个一组翻转链表

news2024/10/3 0:33:53

题目链接:https://leetcode.cn/problems/reverse-nodes-in-k-group/

解题思路:先解决怎么翻转一段链表,然后在解决这道题。

  1. 翻转一个链表reverse(head,tail)

比如将链表1->2->3->4进行翻转,则翻转后的链表为:1<-2<-3<-4。

思路:从前往后遍历,依次将当前节点的next指针指向前一个节点,可以使用prev记录上一个节点

  1. 假设要翻转一段链表的头节点为head,尾节点为tail。遍历链表,在进行翻转的时候,需要记录当前节点current的前驱prev,因为翻转的链表head之前和tail之后还可能有节点,翻转后原来的tail会成为新的头节点,head会成为新的尾节点,即head.next需要连接原来的tail.next,所以初始时,可以令prev=tail.next

  1. 在遍历的时候只要前驱prev不等于尾节点tail,就循环翻转:

  1. 首先记录下一个节点next=current.next

  1. 令当前节点的next指向前驱prev,current.next=prev

  1. 更新prev=current

  1. 遍历下一个节点,current=current.next

  1. 遍历结束后,当前链表已经成功翻转,并且head成为尾节点,tail成为头节

  1. K个一组进行翻转

  1. 可以在头节点前新建一个哑元节点newHead,令newHead.next=head,这样,头节点就不需要额外处理判断

  1. k个一组进行翻转时,需要将这k个反转后的链表重新和前后节点连接上,因此,需要记录开始翻转的节点的前驱prev,初始时prev=newHead

  1. 循环遍历,直到head==null(遍历到最后一个节点)

  1. head为要翻转的链表的第一个节点,tail为要翻转的链表的最后一个节点

  1. 如果链表长度小于k,不需要翻转,直接返回newHead.next

  1. 记录下一次需要翻转节点的头节点,next=tail.next

  1. 使用方法一中的步骤,翻转head和tail之间的链表,翻转后tial为新的头节点,head为新的尾节点

  1. 将翻转后的链表和前面的节点连接上,即prev.next=tail

  1. 将翻转后的链表和后面的节点连接上,即head.next=next

  1. 更新前驱prev=head(上一次翻转后链表的尾节点)

  1. 更新下一次要翻转链表的头指针,head=next

AC代码:

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

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

相关文章

Guitar Pro8免费吉他曲谱mySongBook

每周都会发布新的谱子&#xff0c;目前已有有数千首歌曲可供选择&#xff0c;在谱库中&#xff0c;您能找到 Guns N Roses&#xff0c;Miles Davis&#xff0c;Ed Sheeran 等人的经典曲目。开头我们先做一个小实验&#xff1a;现在打开你电脑里存放曲谱的文件夹&#xff0c;里面…

记录每日LeetCode 2373.矩阵中的局部最大值 Java实现

题目描述&#xff1a; 给你一个大小为 n x n 的整数矩阵 grid 。 生成一个大小为 (n - 2) x (n - 2) 的整数矩阵 maxLocal &#xff0c;并满足&#xff1a; maxLocal[i][j] 等于 grid 中以 i 1 行和 j 1 列为中心的 3 x 3 矩阵中的 最大值 。 换句话说&#xff0c;我们希…

基于Linux_ARM板的驱动烧写及连接、挂载详细过程(附带驱动程序)

文章目录前言一、搭建nfs服务二、ARM板的硬件连接三、putty连接四、挂载共享文件夹五、烧写驱动程序六、驱动程序示例前言 本文操作环境&#xff1a;Ubuntu14.04、GEC6818 这里为似懂非懂的朋友简单叙述该文章的具体操作由来&#xff0c;我们的主要目的是将写好的驱动程序烧进…

教你如何搭建设备-报修管理系统,demo可分享

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建设备-报修管理。1.2、应用场景对于故障的设备发起报修流程&#xff0c;指派人员维修&#xff0c;可查看设备维修记录。2、设置方法2.1、表单搭建1&#xff09;新建表单【设备档案-履历表】&#xff0c;字段设置如下&#xf…

低能高效打工人-查找被引文献的大牛

目录 本分享主要目标&#xff1a; Part 1 1、根据文章在wos将所需要的数据导出至excel。 2、如何判断大牛和搜索大牛 Part 2 1、下载大牛对应的文章并标记 2、文献下载 本分享主要目标&#xff1a; 1、找出引用 导师的文献 的大牛 2、根据大牛下载对应的文章并标记 Pa…

【验证码逆向专栏】某验三代、四代一键通过模式逆向分析

声明 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 本文章未经许可禁止转载…

进程控制

文章目录进程控制子程序与父程序区别进程创建进程终止进程等待进程替换进程控制 多进程是程序进行的基本功能&#xff0c;所需要进行基础控制的操作。用来减少因为单核性能不足的原因造成的系统卡死。 子程序与父程序区别 完全继承父进程相关的内存块和数据块&#xff0c;拷贝…

【工具插件类教学】UnityPackageManager私人定制资源工具包

目录 一.UnityPackageManager的介绍 二.package包命名 三.包的布局 四.生成清单文件 五.制作package内功能 六.为您的软件包撰写文档 1.信息的结构 2.文档格式 七.提交上传云端仓库 1.生成程序集文件 2.上传至云端仓库 八.下载使用package包 1.获取包的云端路径 …

Arduino IDE启动闪退或者运行中闪退

文章目录一、你中了哪一种&#xff1f;1、安装了不符合规格的库文件2、安装了不符合规范的开发板库文件二、解决方案1、轻方案2、全盘重来Arduino IDE启动闪退或者运行中闪退&#xff0c;出现这样的问题&#xff0c;其实不需要思考了&#xff0c;就是运行库配置的问题&#xff…

clion在linux设置桌面启动图标(jetbrains全家桶均适用)

clion在linux设置桌面启动图标&#xff08;jetbrains全家桶均适用&#xff09; 网上大部分步骤都只是pycharm的教程&#xff0c;其实对于jetbrains全家桶都适合&#xff0c;vs code编辑器也可以这样。 刚开始是使用pycharm在linux设置的教程&#xff0c;参照&#xff1a;http…

计算机组成原理4小时速成3:存储器,主存ROM,RAM,cache高速缓存,辅存外设,地址编址方案,汉明码检错纠错

计算机组成原理4小时速成3&#xff1a;存储器&#xff0c;主存ROM,RAM&#xff0c;cache高速缓存&#xff0c;辅存外设&#xff0c;地址编址方案&#xff0c;汉明码检错纠错 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;…

CSS-Grid(网格)布局

前言 之前HTML 页面的布局基本上都是通过 Flexbox 来实现的&#xff0c;能轻松的解决复杂的 Web 布局。 现在又出现了一个构建 HTML 最佳布局体系的新竞争者。就是强大的CSS Grid 布局。 grid和flex区别是什么&#xff1f;适用什么场景&#xff1f; Flexbox 是一维布局系统&am…

js几种对象创建方式

适用于不确定对象内部数据方式一&#xff1a;var p new Object(); p.name TOM; p.age 12 p.setName function(name) {this.name name; }// 测试 p.setName(jack) console.log(p.name,p.age)方式二&#xff1a; 对象字面量模式套路&#xff1a;使用{}创建对象&#xff0c;同…

chatgpt 到底颠覆了什么 第一部分

ChatGPT一出来&#xff0c;一堆搞NLP的立马哭了。为什么&#xff1f;不该问为什么哭&#xff0c;而该问为什么还不哭。 有两个立马大哭的理由。 第一个理由很多人说了&#xff0c;范式改变。 虽然说没有哪个研究领域&#xff0c;甚至没有哪个领域敢说自己真的是天道酬勤绝对公平…

自己第一次在虚拟机完整部署ssm项目心得体会

过程使用资源和博文 琳哥发的linux课件文档,阳哥发的linux课件文档(私聊我要) https://www.likecs.com/show-205274015.html https://www.cnblogs.com/aluoluo/articles/15845183.html https://blog.csdn.net/osfipin/article/details/54405445 https://blog.csdn.net/drea…

【封装xib补充 Objective-C语言】

一、那么首先,咱们就从这个结果来分析 1.就不给大家一步一步分析了,直接分析我们这里怎么想的, 首先,我们看到这样的一个界面,我们想,这些应用数据是不是来源于一个plist文件吧, 所以说,我们首先要,第一步,要懒加载,把这个plist文件中的数据,加载起来, 那么,因…

超详细MySQL(免安装版)安装与配置

一、MySQL下载 首先打开MySQL官网&#xff0c;官网首页地址为 MySQL官网首页地址 进入官网后如下图所示&#xff0c;点击DOWNLOADS进入下载页面 下滑页面找到MySQL Community&#xff08;GPL&#xff09;Downloads>>并点击 接下来点击MySQL Community Server 若想要安…

C语言数组【详解】

数组1. 一维数组的创建和初始化1.1 数组的创建1.2 数组的初始化1.3 一维数组的使用1.4 一维数组在内存中的存储2. 二维数组的创建和初始化2.1 二维数组的创建2.2 二维数组的初始化2.3 二维数组的使用2.4 二维数组在内存中的存储3. 数组越界4. 数组作为函数参数4.1 冒泡排序函数…

java 学习3(数组)

java ——数组 ✍作者&#xff1a;电子科大不知名程序员 &#x1f332;专栏&#xff1a;java学习指导 各位读者如果觉得博主写的不错&#xff0c;请诸位多多支持&#xff1b;如果有错误的地方&#xff0c;欢迎在评论区指出 数组是一组相同类型元素按一定顺序排列的集合 数组相…

[MatLab]变量与数据结构

在开始工程之前&#xff0c;需要先指定工程目录&#xff0c;按住下图红框按钮进行选择。 Matlab分为编辑器和命令窗口&#xff0c;编辑器用来编写代码文件&#xff0c;而命令窗口可以实时交互。 在窗口中输入clc即可清除命令窗口&#xff1b;clear all可以清除工作区中所有变量…