当前位置: 首页 > news >正文

每日一练:K个一组翻转链表

25. K 个一组翻转链表 - 力扣(LeetCode)

一、题目要求

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

提示:

  • 链表中的节点数目为 n
  • 1 <= k <= n <= 5000
  • 0 <= Node.val <= 1000

进阶:你可以设计一个只用 O(1) 额外内存空间的算法解决此问题吗?

二、解法1-双层递归 O(N) 进阶

        这个题与翻转链表(每日一练:反转链表-CSDN博客)类似,但是它是分成了几个组分别进行反转,反转链表时我们使用递归来完成,这个题我们很容易想到把链表分层几部分分别递归,但是难点在于各个部分反转后还需要进行连接,这就又需要一层递归,即:

        先递归(外层递归)到最后一个要进行反转的部分,进行递归反转(内层递归)后,得到它的新头后返回上一层递归(外层递归);上一层递归是前一个要进行反转的部分,这部分又进行递归反转后将新尾连接到上一次返回的新头即可

        新头就是旧尾,要返回给调用它的上一次函数,也就是链表的前一部分。

        新尾就是旧头,我们可以在外层递归时保存这个节点,得到后一部分的新头后指向它。

        外层递归是为了以从后向前的顺序枚举到所有需要反转的组;

        内存递归就是为了翻转这些组;

class Solution {ListNode* __reverseKGroup(ListNode* last, ListNode* cur, int k) { // 内层递归if (k == K){cur->next = last;return cur;}ListNode* newhead = __reverseKGroup(cur, cur->next, k+1);cur->next = last;return newhead; // 返回新头}ListNode* _reverseKGroup(ListNode* cur, ListNode* head, int k) { // 外层递归if (cur == nullptr || cur->next==nullptr && k != K){return head;}if (k == K){ListNode* head_next = _reverseKGroup(cur->next, cur->next, 1); // 得到下一部分的新头以连接它ListNode* newhead = __reverseKGroup(head_next , head, 1); // 得到这部分的新头,并连接下部分的新头return newhead; // 返回这部分的新头给前一部分}return _reverseKGroup(cur->next, head, k+1);}
public:ListNode* reverseKGroup(ListNode* head, int k) {K = k;return _reverseKGroup(head, head,1);}
private:int K;
};

相关文章:

每日一练:K个一组翻转链表

25. K 个一组翻转链表 - 力扣&#xff08;LeetCode&#xff09; 一、题目要求 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#x…...

昨晚,OpenAI震撼发布o1大模型!我们正式迈入了下一个时代。

大半夜的&#xff0c;OpenAI抽象了整整快半年的新模型。 在没有任何预告下&#xff0c;正式登场。 正式版名称不叫草莓&#xff0c;草莓只是内部的一个代号。他们的正式名字&#xff0c;叫&#xff1a; 为什么取名叫o1&#xff0c;OpenAI是这么说的&#xff1a; For complex …...

MySql8.x---开窗函数

1、定义 语法结构&#xff1a; ** 开窗函数|聚合函数 over([分组函数] [排序函数] [自定义窗口]) ** 分组函数&#xff1a;partition by ...&#xff0c;根据指定的字段对表分组&#xff0c;分组字段可以有多个。省略时表示整个表为一组。 排序函数&#xff1a;order by ...&…...

图文讲解HarmonyOS应用发布流程

HarmonyOS应用的开发和发布过程可以分为以下几个步骤&#xff1a;证书生成、应用开发、应用签名和发布。 1. 证书生成&#xff1a; 在开始开发HarmonyOS应用之前&#xff0c;首先需要生成一个开发者证书。开发者证书用于标识应用的开发者身份并确保应用的安全性。可以通过Har…...

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37628 6月16日&#xff0c;小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞&#xff0c;这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示&#xff0c;公司准备量产&#xff0c;并计划今年四季度开启预…...

经典负载调制平衡放大器(LMBA)设计-从理论到ADS仿真

经典负载调制平衡放大器&#xff08;LMBA&#xff09;设计-从理论到ADS仿真 ADS工程下载&#xff1a;经典负载调制平衡放大器&#xff08;LMBA&#xff09;设计-从理论到ADS仿真-ADS工程 参考论文: An Efficient Broadband Reconfigurable Power Amplifier Using Active Load…...

Web开发:基础Web开发的支持

创建项目&#xff1a; 添加依赖: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…...

【LeetCode每日一题】——LCR 168.丑数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目注意】六【题目示例】七【题目提示】八【解题思路】九【时间频度】十【代码实现】十一【提交结果】 一【题目类别】 优先队列 二【题目难度】 中等 三【题目编号】 LCR 168.丑数 四【题目描述…...

Day7 | Java框架 | SpringMVC

Day7 | Java框架 | SpringMVC SpringMVC简介SpringMVC 概述入门案例入门案例工作流程分析Controller 加载控制与业务bean加载控制&#xff08;SpringMVC & Spring&#xff09;PostMan 请求与响应请求映射路径请求方式&#xff08;不同类型的请求参数&#xff09;&#xff1…...

【网络通信基础与实践第二讲】包括互联网概述、互联网发展的三个阶段、互联网的组成、计算机网络的体系结构

一、互联网概述 计算机网络是由若干节点&#xff08;node&#xff09;和连接这些节点的链路&#xff08;link&#xff09;组成。 网络之间还可以通过路由器互联起来&#xff0c;这就构成了一个覆盖范围更大的计算机网络。这样的网络称为互联网。 网络把许多计算机连接在一起…...

CentOS7下安装Ruby3.2.4的实施路径

一、CentOS版本 [userzt ~]$ cat /etc/os-release NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI_COLOR"0;31" CPE…...

Redis 实现原理或机制

Redis 是一个高性能的、基于内存的键值对存储系统&#xff0c;广泛用于缓存、会话管理、排行榜和消息队列等场景。它的高效性得益于其独特的实现原理和机制&#xff0c;Redis支持丰富的数据结构和多种持久化、复制、集群和发布/订阅功能&#xff0c;提供了灵活性和高可用性。 …...

使用程序方式获取与处理MySQL表数据

8.1  执行多条语句获取 MySQL 表数据 8.1.1  MySQL 中的常量 8.1.2  MySQL 中的变量 1&#xff0e;用户变量 用户可以在表达式中使用自己定义的变量&#xff0c;这样的变量称为用户变量。 用户变量在使用前必须定义和初始化&#xff0c;如果使用没有初始化的变量&#x…...

计算机网络(五) —— 自定义协议简单网络程序

目录 一&#xff0c;关于“协议” 1.1 结构化数据 1.2 序列化和反序列化 二&#xff0c;网络版计算器实现准备 2.1 套用旧头文件 2.2 封装sock API 三&#xff0c;自定义协议 3.1 关于自定义协议 3.2 实现序列化和反序列化 3.3 测试 三&#xff0c;服务器实现 3.1…...

开源模型应用落地-qwen2-7b-instruct-LoRA微调-unsloth(让微调起飞)-单机单卡-V100(十七)

一、前言 本篇文章将在v100单卡服务器上,使用unsloth去高效微调QWen2系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 使用unsloth能够使模型的微调速度提高 2 - 5 倍。在处理大规模数据或对时间要求较高的场景下,…...

[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;138 标注数量(xml文件个数)&#xff1a;138 标注数量(txt文件个数)&#xff1a;138 标注类别…...

Delphi 的 RSA 库 LockBox

LockBox 是用于 Delphi 的一套加密/解密控件 最早是一套商业控件&#xff0c;后来开源了。再后来&#xff0c;又有一个新版本的 LockBox&#xff0c;和旧版本完全不同。 旧版本的 LockBox 叫 LockBox 2&#xff1b;新版本的叫 LockBox 3。 这两个控件&#xff0c;都可以通过…...

element UI学习使用(1)

https://element.eleme.cn/2.6/#/zh-CN/component/container vue模块库&#xff0c;可复制直接使用 1、搜索框、下拉搜索框 <el-form :inline"true" class"demo-form-inline"><el-form-item label"结果搜索"><el-inputplaceho…...

如何搞定日语翻译?试试这四款工具

写一篇字数800-1000字的软文&#xff0c;用翻译新手的角度分享福昕翻译在线、福昕翻译客户端、海鲸AI翻译以及彩云翻译在翻译日语时候的表现&#xff0c;要求口语化表达。 最近对于一些轻小说突然感兴趣了&#xff0c;所以我开始尝试各种翻译工具来帮助我搞定日语翻译。今天&am…...

【STM32】独立看门狗(IWDG)原理详解及编程实践(上)

本篇文章是对STM32单片机“独立看门狗&#xff08;IWDG&#xff09;”的原理进行讲解。希望我的分享对你有所帮助&#xff01; 目录 一、什么是独立看门狗 &#xff08;一&#xff09;简介 &#xff08;二&#xff09;、独立看门狗的原理 &#xff08;三&#xff09;、具体操…...

在AutoDL上从零部署YOLO训练环境:新手避坑指南

1. 为什么选择AutoDL部署YOLO训练环境 第一次接触目标检测任务时&#xff0c;我和大多数新手一样被各种环境配置问题折磨得够呛。本地显卡跑不动YOLOv5&#xff0c;租用云服务器又担心操作复杂&#xff0c;直到发现了AutoDL这个宝藏平台。它最大的优势就是把复杂的GPU实例管理简…...

高频电路设计必看:5分钟搞懂PCB阻抗匹配的3个关键参数(附SI9000计算技巧)

高频PCB设计实战&#xff1a;从阻抗理论到SI9000精准计算的完整指南 引言&#xff1a;为什么你的高速信号总是不稳定&#xff1f; 上周和一位资深硬件工程师聊天&#xff0c;他提到自己设计的千兆以太网板卡在测试时总是出现信号抖动问题&#xff0c;反复调整了三四版Layout依然…...

OpenClaw多模型切换指南:Qwen3-32B与其他镜像协同工作

OpenClaw多模型切换指南&#xff1a;Qwen3-32B与其他镜像协同工作 1. 为什么需要多模型切换&#xff1f; 去年冬天&#xff0c;当我第一次尝试用OpenClaw自动化处理公司周报时&#xff0c;发现单一模型很难同时满足"数据分析"和"文案润色"两种需求。Qwen…...

避坑指南:Windows下OpenCV摄像头索引混乱问题的3种解决之道

避坑指南&#xff1a;Windows下OpenCV摄像头索引混乱问题的3种解决之道 在工业视觉和智能监控领域&#xff0c;多摄像头协同工作是常见需求。但当你在Windows平台上使用OpenCV的VideoCapture接口时&#xff0c;可能会遇到这样的困扰&#xff1a;每次重启系统后&#xff0c;原本…...

LangGPT:革新自然语言编程的结构化提示词框架

LangGPT&#xff1a;革新自然语言编程的结构化提示词框架 【免费下载链接】LangGPT LangGPT: Empowering everyone to become a prompt expert!&#x1f680; Structured Prompt&#xff0c;Language of GPT, 结构化提示词&#xff0c;结构化Prompt 项目地址: https://gitcod…...

出海营销决战指南:从“流量过客”到“私域常客”的全局地图

2026 全球出海营销日历&#xff1a;如何在关键节点实现社媒私域流量的指数级增长&#xff1f;2026年&#xff0c;出海战场规则已变。粗放投放的红利耗尽&#xff0c;碎片化的渠道、敏感的风控与难以逾越的文化沟壑&#xff0c;正让每一分营销预算的效能急剧衰减。节点依旧汹涌&…...

风扇智能调节终极指南:三步打造安静高效的散热系统

风扇智能调节终极指南&#xff1a;三步打造安静高效的散热系统 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...

告别蜗牛速度!优麒麟20.04 LTS换源华为云镜像保姆级教程

优麒麟20.04 LTS提速指南&#xff1a;华为云镜像配置全解析 每次在优麒麟上安装软件时&#xff0c;看着进度条像蜗牛一样缓慢前进&#xff0c;是不是让你感到无比焦虑&#xff1f;特别是当你急需某个工具完成工作时&#xff0c;漫长的等待简直让人抓狂。作为一款基于Ubuntu的国…...

STM32串口通信原理与实现详解

串口通信技术深度解析&#xff1a;从原理到STM32实现1. 串口通信基础概念1.1 数据传送方向分类串行通信根据数据传输方向可分为三种基本模式&#xff1a;单工模式&#xff1a;数据仅支持单向传输&#xff0c;如传统的广播系统。发送端和接收端角色固定&#xff0c;硬件上只需单…...

PLCopen运动控制功能块实战:从单轴控制到多轴联动的5个经典案例解析

PLCopen运动控制功能块实战&#xff1a;从单轴控制到多轴联动的5个经典案例解析 在工业自动化领域&#xff0c;精确的运动控制是实现高效生产的关键。无论是简单的传送带定位&#xff0c;还是复杂的多轴协同作业&#xff0c;PLCopen规范提供的标准化功能块都能为工程师提供强大…...