25. K 个一组翻转链表(难)

news/2025/1/7 9:43:48/文章来源:https://www.cnblogs.com/lushuang55/p/18653210

目录
  • 题目
  • 法一、模拟--迭代
  • 法二、递归

题目

  • 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
    k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
    你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

法一、模拟--迭代

  • 遍历列表,到达计数k将k个用头插法翻转,注意翻转后连接回整个链表。没有达到k不进行翻转
var reverseKGroup = function(head, k) {// 创建一个虚拟节点,以简化边界条件处理let dummy = new ListNode();dummy.next = head; // 将虚拟节点的next指向原链表的头节点let [start, end] = [dummy, dummy.next]; // start指向虚拟节点,end指向链表的第一个节点let count = 0; // 计数器,用于计数节点// 遍历链表,直到end为nullwhile(end) {count++; // 计数节点数量// 当计数到k的倍数时,表示需要进行翻转if (count % k === 0) {// 翻转start到end之间的链表start = reverseList(start, end.next);end = start.next; // 更新end为翻转后的链表的下一个节点} else {end = end.next; // 移动end指针}}return dummy.next; // 返回翻转后的链表头节点,即dummy.next// 翻转start到end之间的链表function reverseList(start, end) {let [pre, cur] = [start, start.next]; // pre指向start,cur指向start的下一个节点const first = cur; // 记录翻转后的第一个节点// 头插法进行翻转,直到cur等于endwhile(cur !== end) {let next = cur.next; // 记录cur的下一个节点cur.next = pre; // 将cur的next指向pre,实现翻转pre = cur; // 移动pre到curcur = next; // 移动cur到下一个节点}// 将翻转后的子链表连接前后start.next = pre; // 将start的next指向翻转后的第一个节点first.next = cur; // 将翻转后的第一个节点的next指向end(即cur)return first; // first经过翻转应该在子链表最后}
};

法二、递归

var reverseKGroup = function(head, k) {let cur = head;let count = 0;// 求k个待反转元素的首节点和尾节点while(cur != null && count != k){cur = cur.next;count++;}// 足够k个节点,去反转if(count == k){// 递归链接后续k个反转的链表头节点cur = reverseKGroup(cur,k);while(count != 0){count--;// 反转链表let tmp = head.next;head.next = cur;cur = head;head = tmp;}head = cur;}return head;
};

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

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

相关文章

OpenWrt 系统UCI详解(Lua、C语言调用uci接口实例)

1 UCI简介 “uci"是"Unified Configuration Interface”(统一配置界面)的缩写,用于OpenWrt整个系统的配置集中化。 很多后台服务有自己的配置文件,并且配置文件格式都不相同,OpenWrt系统中需要开启各种服务,为了解决配置不兼容的问题,统一采用uci格式的配置文件。…

macbook 双系统win7忘密码 解决办法 通用

1开机出现以下图片按开机键强制重启2选择这一个3跟着选择4等待时间较长5继续678点击计算机9选择c盘10选择Windows进入system32文件夹11右键修改名字 将sethc 修改为sethc112然后键盘上输入cmd13将cmd名字修改为sethc 14关掉所有点击完成 15然后开机来到登录界面 按5次shift 次数…

GoLang 2024 安装激活详细使用教程(激活至2026,实测是永久,亲测!)

开发工具推荐:GoLang 安装激活详细使用教程(激活至2026,实际上永久,亲测!)申明:本教程 GoLang 补丁、激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除。若条件允许,希望大家购买正版 ! GoLang是JetBrains公司推出的一款功能强大的GO语言集成…

数值计算方法(3) 数值微分方法

+++ date = 2024-12-21T15:45:47+08:00 draft = true title = 数值计算方法(3) 数值微分方法 +++ 初次发布于我的个人文档 上一期讲了数值积分方法,这一次自然是要讲数值微分方法的,不然太不完善了。 更何况数值微分方法其实是基于数值积分方法得到的。 我们先从比较简单的估…

.Net NativeAOT另外一种选择-bflat

https://www.qiufengblog.com/articles/dotnet-native-bflat.html前言 说起bflat,还得先说NativeAOT,在.Net 7时,正式把NativeAOT合到Runtime中,地位是明显上升了,对NativeAOT的代码提交也越来越多了,之前还是corert时,几年也没有太大的进展. 这个时候的成果还是有ILC(ILCompil…

20241415 《计算机基础与程序设计》课程总结

20241415 《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业 参考基于VirtualBox虚拟机安装Ubuntu图文教程安装Linux系统 自学计算机科学概论》并提出问题第二周作业 了解计算思维和计算机结构第三周作业 计算机的数据表示法 C语言的基本数据类型第四周作业 门电路…

centos7 开启网卡相关设置

默认网卡是ens33 查看ip命令 ip a 或 ip addr 对于没有启用的网卡,使用命令ifup,开启网卡。注意网卡的名称ens33 找到自己对应的ifup ens33 永久默认启用网卡,关机或重启后,网卡自动启用该配置文件在/etc/sysconfig/network-scripts文件夹下,可以提前备份下 ifcfg-ens3…

20241417 《计算机基础与程序设计》课程总结

20241417 《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业:链接 简要内容:课程概论,工业革命与浪潮之巅,信息与信息安全,计算机系统概论,计算机安全,计算的限制,计算思维第三周作业:链接 简要内容:数字分类与计数法,位置计数法,进制转换,模拟数据与…

PCIe扫盲——Base Limit寄存器详解

上一篇文章介绍了Type0型配置空间Header中的BAR的作用和用法,但是PCIe中的桥设备(Switch和Root中的P2P)又是如何判断某一请求(Request)是否属于自己或者自己的分支下的设备的呢?(定义范围) 这实际上是通过Type1型配置空间Header中的Base和Limit寄存器来实现的,这篇文章…

用.NET X64 Native AOT编写的操作系统

https://blog.csdn.net/sd7o95o/article/details/1331911601.前言很多人想学习下.Net前沿技术和核心技术,这里推荐一个适合大家学习的案例,用.NET X64 Native AOT编写一个操作系统。 2.概述MOOS(To Make My Own Operating System Project)是一个采用.NET x64 Native AOT技术…

Win32汇编学习笔记05

定位关键点3种方法: 过程函数 api 字符串 但是不确定用要哪一种方法,可以3种方法都用一下,因为在不同的程序,实用的方法是不一样的 窗口程序看控件信息 1.通过OD去看还可以用 spy ++ 查看还可以用vs2019 ,打开软件,找到对应控件直接看属性一般拿句柄没用,因为按钮是响应 WM_COM…

2025年,勇敢探索,才能突破困境

新年第一篇文章,不聊技术,聊聊今年的计划,以及未来的发展趋势。 在24年的第一篇文章中,我用“苟住求活”这个词形容了我当时的判断,如今回过头再看2024年,大家都过的很挣扎。经济环境进一步恶化,就业机会越发的稀少,降本增效降薪裁员,是去年很多人的真实经历。 今年的…