算法 定长按组翻转链表
一、题目
已知一个链表的头部head,每k个结点为一组,按组翻转。要求返回翻转后的头部
k是一个正整数,它的值小于等于链表长度。如果节点总数不是k的整数倍,则剩余的结点保留原来的顺序。示例如下:
(要求不可以仅仅改变节点内部的值,而是真正的交换节点)

二、解题思路
1.首先每次检查剩余未翻转的节点是否满足k个,如果不满足,则直接返回。
2.如果满足k个,将其取出,写一个独立函数对其翻转,并返回翻转后的头尾指针。
3.再根据头尾指针,将子表连接回原表中,继续往下重复步骤1。
(注意:在取出子表之前,需保存好它在原表中的头尾指针,这样翻转后才能连接回原表)
三、代码
#include <iostream>using namespace std;struct ListNode {int val;ListNode* next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode* next) : val(x), next(next) {}
};//展示链表节点顺序
void showList(ListNode* head) {bool first = true;while (head) {if (first) {first = false;cout << head->val;} else {cout << " -> " << head->val;}head = head->next;}cout << endl;
}//创造链表
ListNode* createList(int count) {ListNode* head = new ListNode(1);ListNode* p = head;for (int i = 2; i <= count; i++) {p->next = new ListNode(i);p = p->next;}p->next = nullptr;return head;
}//翻转链表,并返回头尾
pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail) {ListNode* prev = tail->next;ListNode* p = head;while (prev != tail) {ListNode* next = p->next;p->next = prev;prev = p;p = next;}return { tail, head };
}//按k个为一组翻转链表
ListNode* reverseKGroup(ListNode* head, int k) {//做一个头节点ListNode* hair = new ListNode(0);hair->next = head;ListNode* pre = hair;while (head != nullptr) {ListNode* tail = pre;//判断剩余节点是否够k个for (int i = 0; i < k; i++) {tail = tail->next;if (!tail) {return hair->next;}}ListNode* next = tail->next;pair<ListNode*, ListNode*> res = myReverse(head, tail);head = res.first;tail = res.second;//将翻转后的子链表接回去pre->next = head;tail->next = next;//准备下一组翻转pre = tail;head = tail->next;}return hair->next;
}//主函数
int main() {ListNode* head = createList(5);cout << "Before reverse by 2 : " << endl;showList(head);//按2个为一组翻转链表ListNode* rev_head = reverseKGroup(head, 2);cout << endl << endl;cout << "Before reverse by 2 : " << endl;showList(rev_head);return 0;
}
四、执行结果

相关文章:
算法 定长按组翻转链表
一、题目 已知一个链表的头部head,每k个结点为一组,按组翻转。要求返回翻转后的头部 k是一个正整数,它的值小于等于链表长度。如果节点总数不是k的整数倍,则剩余的结点保留原来的顺序。示例如下: (要求不…...
安装nfs和rpcbind设置linux服务器共享磁盘
1、安装nfs和rpcbind 1.1 检查服务器是否安装nfs和rpcbind,执行下命令,检查服务器是否安装过。 rpm -qa|grep nfs rpm -qa|grep rpcbind 说明服务器以安装了,如果没有就需要自己安装 2、安装nfs和rpcbind 将rpm安装包: libtirpc-…...
物联网在电力行业的应用
作者主页: 知孤云出岫 这里写目录标题 作者主页:物联网在电力行业的应用简介主要应用领域代码案例分析1. 智能电表数据采集和分析2. 设备监控和预测性维护3. 能耗管理和优化4. 电力负载预测5. 分布式能源管理6. 电动汽车充电管理7. 电网安全与故障检测 物联网在电力行业的应用…...
Java 代码规范if嵌套
在Java编程中,过度的if嵌套会使代码难以阅读和维护。为了遵循良好的代码规范,我们应尽量减少嵌套的深度。这通常可以通过重新组织代码或使用其他结构(如switch语句,或者将逻辑封装到单独的方法中)来实现。 以下是一个…...
ASPICE如何确保汽车软件产品质量的稳固基石
ASPICE通过一系列的方法和原则来保障汽车软件产品的质量,以下是其保障产品质量的几个关键方面: 制定明确的质量方针和目标: ASPICE要求组织制定明确的质量方针和目标,这些方针和目标与客户需求和预期相一致。 开发团队需要定义软…...
【深度学习】yolov8-seg分割训练,拼接图的分割复原
文章目录 项目背景造数据训练 项目背景 在日常开发中,经常会遇到一些图片是由多个图片拼接来的,如下图就是三个图片横向拼接来的。是否可以利用yolov8-seg模型来识别出这张图片的三张子图区域呢,这是文本要做的事情。 造数据 假设拼接方式有…...
Python升级打怪—Django入门
目录 一、Django简介 二、安装Django 三、创建Dajngo项目 (一) 创建项目 (二) 项目结构介绍 (三) 运行项目 (四) 结果 一、Django简介 Django是一个高级Python web框架,鼓励快速开发和干净、实用的设计。由经验丰富的开发人员构建,它解决了web开…...
leetcode面试题17.最大子矩阵
sooooooo long没刷题了,汗颜 题目链接:leetcode面试题17 1.题目 给定一个正整数、负整数和 0 组成的 N M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和…...
计算机网络:构建联结的基础
目录 1. 网络拓扑结构 1.1 星型拓扑 1.2 环型拓扑 1.3 总线型拓扑 1.4 网状拓扑 2. 传输介质 2.1 双绞线 2.2 同轴电缆 2.3 光纤 2.4 无线电波 3. 协议栈模型 3.1 OSI模型 3.2 TCP/IP模型 4. 网络设备 4.1 交换机 4.2 路由器 4.3 网关 4.4 防火墙 5. IP地址…...
node和npm安装;electron、 electron-builder安装
1、node和npm安装 参考: https://blog.csdn.net/sw150811426/article/details/137147783 下载: https://nodejs.org/dist/v20.15.1/ 安装: 点击下载msi直接运行安装 安装完直接cmd打开可以,默认安装就已经添加了环境变量&…...
操作系统概念(黑皮书)阅读笔记
操作系统概念(黑皮书)阅读笔记 进程和内存管理部分章节 导论: 操作系统类似于政府,其本身不能实现任何有用功能,而是提供一个方便其他程序执行有用工作的环境 个人理解:os是government的作用࿰…...
matlab gui下的tcp client客户端编程框架
GUI界面 函数外定义全局变量 %全局变量 global TcpClient; %matlab作为tcpip客户端 建立连接 在“连接”按钮的回调函数下添加以下代码: global TcpClient;%全局变量 TcpClient tcpip(‘192.168.1.10’, 7, ‘NetworkRole’,‘client’); %连接到服务器地址和端…...
Matplotlib : Python 的绘图库
Matplotlib 是一个 Python 的绘图库,广泛用于生成各种静态、动态、交互式的图表。它基于 NumPy,一个用于科学计算的 Python 库。Matplotlib 可以用于生成出版质量级别的图表,并且提供了丰富的定制选项,以适应不同用户的需求。以下…...
数据编织 VS 数据仓库 VS 数据湖
目录 1. 什么是数据编织?2. 数据编织的工作原理3. 代码示例4. 数据编织的优势5. 应用场景6. 数据编织 vs 数据仓库6.1 数据存储方式6.2 数据更新和实时性6.3 灵活性和可扩展性6.4 查询性能6.5 数据治理和一致性6.6 适用场景6.7 代码示例比较 7. 数据编织 vs 数据湖7.1 数据存储…...
CSS(十一)——CSS分组和嵌套,尺寸(Dimension)
CSS 分组 和 嵌套 选择器 分组选择器 举个例子,多个标签有同一个样式,就可以不一个一个分开写,使用分组选择器 比如: h1 {color:green; } h2 {color:green; } p {color:green; } 就可以写为: h1,h2,p {color…...
必备神器!三款优秀远程控制电脑软件推荐
嘿,各位职场小伙伴们,今儿个咱们来聊聊个挺实用又带点“科技范儿”的话题——电脑远程控制那点事儿。作为刚踏入职场不久的新人,我深刻体会到,在这信息爆炸的时代,掌握几招远程操作的技能,简直就是给自个儿…...
关于正运动学解机器人手臂算法
机器人正运动学是机器人学的一个分支,研究机器人的运动和位置之间的关系。它通过解析机器人的结构和关节参数,以及给定的关节角度,来计算机器人的末端执行器的位置和姿态。 机器人正运动学算法通常使用DH(Denavit-Hartenberg&…...
MySQL 约束 (constraint)
文章目录 约束(constraint)列级约束和表级约束给约束起名字(constraint)非空约束(no null)检查约束(check)唯一性约束 (unique)主键约束 (primary key)主键分类单一主键复合主键主键自增 (auto_increment) 外键约束外什…...
用python程序发送文件(python实例二十六)
目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.文件上传 3.1 代码构思 3.2 服务端代码 3.3 客户端代码 3.4 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具…...
最新源支付系统源码 V7版全开源 免授权 附搭建教程
本文来自:最新源支付系统源码 V7版全开源 免授权 附搭建教程 - 源码1688 简介: 最新源支付系统源码_V7版全开源_免授权_附详细搭建教程_站长亲测 YPay是专为个人站长打造的聚合免签系统,拥有卓越的性能和丰富的功能。它采用全新轻量化的界面…...
腾讯王者荣耀强化学习环境:打造专业AI训练平台的完整指南
腾讯王者荣耀强化学习环境:打造专业AI训练平台的完整指南 【免费下载链接】hok_env Honor of Kings AI Open Environment of Tencent 项目地址: https://gitcode.com/gh_mirrors/ho/hok_env 在人工智能研究领域,游戏环境一直是强化学习算法的理想…...
# 发散创新:用 Rust实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中,**高效的任务调度与资源管理**是性能
发散创新:用 Rust 实现一个轻量级游戏日引擎的核心调度机制 在现代游戏开发中,高效的任务调度与资源管理是性能瓶颈的关键所在。尤其是在“游戏日”这类强调多线程并行处理、实时响应的场景下,传统基于 C 或 Python 的方案往往因内存安全问题…...
实战:利用大模型预测 2026 年最热门的‘长尾提问’并提前进行 GEO 占位
各位编程领域的同仁、技术爱好者,大家好!今天,我们齐聚一堂,探讨一个既前沿又极具实战价值的议题:如何利用大模型(Large Language Models, LLMs)的强大能力,预测2026年可能成为热点的…...
Pikachu靶场实战:SQL注入漏洞深度解析与防御指南
1. SQL注入漏洞初探:从Pikachu靶场开始 第一次接触SQL注入时,我完全被这种"通过输入框就能控制数据库"的神奇攻击方式震惊了。在Pikachu靶场这个专为Web安全学习设计的实验环境中,我们可以安全地体验各种SQL注入攻击手法。不同于真…...
保姆级教程:用命令行实时监控瑞芯微RK3588的CPU/GPU/NPU负载与温度
嵌入式开发实战:构建RK3588芯片全维度性能监控系统 在边缘计算和AI推理场景中,RK3588作为一款高性能SoC,其复杂的多核架构(包括6核CPU、Mali-G610 GPU和6TOPS NPU)对系统监控提出了更高要求。本文将手把手教你搭建一个…...
24/7运行指南:OpenClaw+GLM-4-7-Flash树莓派部署与看门狗配置
24/7运行指南:OpenClawGLM-4-7-Flash树莓派部署与看门狗配置 1. 为什么选择树莓派作为OpenClaw的宿主设备? 去年冬天,当我第一次尝试让OpenClaw在我的主力开发机上24小时运行时,遭遇了严重的资源冲突问题。半夜运行的自动化任务…...
Python跑在浏览器里?揭秘2024最稳WASM部署方案:3大框架实测对比+性能压测数据
第一章:Python跑在浏览器里?揭秘2024最稳WASM部署方案:3大框架实测对比性能压测数据Python 从未真正“离开服务器”,但 2024 年,它已能以接近原生的速度在浏览器中执行——依托 WebAssembly(WASM࿰…...
SEO_全面介绍SEO从入门到精通的关键知识点
<h2>什么是SEO?</h2> <p>SEO(Search Engine Optimization,搜索引擎优化)是一套通过优化网站内容和结构,以提高其在搜索引擎结果页面(SERP)中的自然排名的技术和策略。SEO不仅…...
UG/NX二次开发必备:C#和C++项目DLL自动签名与拷贝全攻略(附避坑指南)
UG/NX二次开发实战:C#与C项目DLL签名与部署全流程解析 在工业设计软件领域,Siemens NX(原Unigraphics)的二次开发能力一直是工程师扩展功能、提升效率的重要途径。而DLL文件的数字签名环节,则是确保开发成果能在正版NX…...
用TurtleBot3实测:Navigation2局部代价地图的滚动窗口为何必须用odom坐标系?
TurtleBot3实测:为什么Navigation2局部代价地图必须绑定odom坐标系? 当你在Gazebo中第一次看到TurtleBot3的导航表现时,可能会对局部代价地图(Local Costmap)的坐标系选择产生疑问。为什么这个实时更新的避障地图要绑定…...
