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

news2024/12/23 19:19:01

模拟

前置知识 : 反转链表、两两交换链表中的节点 。 LeetCode 有相应题目,可以先做。


设置哑结点 , 便于操作头结点。 翻转至少要 k k k 个结点 , 先检查剩余结点够不够 k k k 个。 不够 k k k 个就翻转完成了。

翻转分为组内翻转和首尾变向两步 。 如图所示 , 当 k = 3 k =3 k=3 1 1 1 -> 2 2 2 -> 3 3 3 变成 3 3 3 -> 2 2 2 -> 1 1 1 就是组内翻转 。 O O O -> 3 3 3 1 1 1 -> 4 4 4 就是首尾变向 。
1

模拟组内翻转 。 对于第一组,组前结点 p = O p=O p=O 。 用 a a a 表示 p p p -> n e x t next next b b b 表示 a a a -> n e x t next next c c c 表示 b b b -> n e x t next next 。 让 b b b -> n e x t = a next = a next=a 完成反向 , a = b , b = c a=b , b=c a=b,b=c a 、 b a、b ab 后移。组内 k k k 个点之间的连接线一共 k − 1 k-1 k1 条,循环 k − 1 k-1 k1 次 , 完成组内翻转 。
在这里插入图片描述
组内翻转的最后 , a a a 为组内第一个结点 , b b b 为下一组的第一个结点 , 组前结点 p p p 的指向没有变过 , p p p -> n e x t next next 依然指向翻转前的第一个点 ,所以首尾变向很容易完成 , 见代码。

代码展示

C++

class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        auto dummy = new ListNode(-1);
        dummy->next = head;
        auto p= dummy;
        while(1){
            auto t = p;
            for(int i = 0;i<k&&t;i++) t = t->next;//检查k个结点够不够。
            if(!t) break;//剩余结点不足k个
            auto a = p->next , b = a->next;
            for(int i = 0;i<k-1;i++){
                auto c = b->next;
                b->next = a;
                a = b , b = c;
            }
            auto c = p->next;
            p->next = a, c ->next = b;
            p = c;
        }
        return dummy->next;
    }
};
  1. 时间复杂度 : O ( n ) O(n) O(n) n n n 是链表长度,翻转链表的时间复杂度 O ( n ) O(n) O(n) ,遍历链表的时间复杂度 O ( n ) O(n) O(n) , 二者是相加关系 , 每个结点最多被遍历两遍 , 总时间复杂度 O ( 2 n ) O(2n) O(2n) , 忽略常数时间复杂度 O ( n ) O(n) O(n)
  2. 空间复杂度: O ( 1 ) O(1) O(1) , 除若干变量占用的常量级空间,没有使用额外的线性空间

AC

AC

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

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

相关文章

查找xml文件

一 前言 相比xml.dom.minidom&#xff0c;lxml.etree具有高效的查找方法&#xff0c;更方便&#xff0c;直接&#xff1b; 二、知识点&#xff1a;查找感兴趣的元素 举例一&#xff1a;递归遍历其下的所有子树&#xff08;包括子级&#xff0c;子级的子级&#xff0c;等等 …

nero platinum刻录光盘简要教程(文章末尾有教程链接)

nero platinum suit 介绍 使用nero express可以完成多数情况下的光盘应用。在nero platinum suit中单击nero express&#xff0c;这时可以看到nero express的工作界面&#xff0c;在这里面可以刻录数据光盘&#xff0c;可以刻录音乐光盘&#xff0c;可以刻录视频光盘&#xff…

SpringMVC集成静态资源

集成静态资源 静态资源&jsp是被谁处理的 tomcat是一个servlet容器&#xff0c;servlet容器中通常有servlet来处理各种请求&#xff0c;那么当访问静态资源或者jsp的时候&#xff0c;当然也是有servlet来处理这些请求的&#xff0c;但是并未在web.xml中配置哪个servlet来处…

SpringBoot+Vue项目小区疫苗接种管理系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JDK版…

MySQL数据库JDBC编程

目录 前言&#xff1a; 项目中导入驱动包 插入记录 创建数据源 连接数据库 构造sql语句 执行sql语句 释放资源 整体代码展示 查看数据 代码展示 小结&#xff1a; 前言&#xff1a; MySQL为Java提供了驱动包。通过Java程序实现的客户端&#xff0c;可以通过这个驱动…

JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)

问题描述 为完成学校课程一个javaweb的demo&#xff0c;想着对数据库的访问能够更加简洁&#xff0c;所以用了Mybatis。因为之前有过Springboot整合Mybatis经验&#xff0c;所以本以为事情会简单。在Junit的测试类中是能够正常对数据库进行CRUD。在Javaweb的Servlet类中调用数据…

应用层协议之DNS、DHCP

运输层为应用进程提供了端对端的通信服务&#xff0c;但不同的网络应用的应用进程之间&#xff0c;还需要有不同的通信规则。因此在运输层协议之上&#xff0c;还需要有应用层协议。 应用层中有这些常见的协议 域名系统&#xff1a;DNS动态主机配置&#xff1a;DHCP超文本传输…

数据结构之栈

文章目录前言一、栈二、栈应该如何实现1.顺序表or链表2.静态or动态三、栈的实现1.栈的定义2.接口&#xff08;声明&#xff09;3.接口的实现初始化栈销毁栈获取栈顶元素获取栈中有效元素个数入栈出栈检测栈是否为空4.主函数&#xff08;测试&#xff09;总结前言 今天这篇文章…

云原生系列 二【轻松入门容器基础操作】

✅作者简介&#xff1a; CSDN内容合伙人&#xff0c;全栈领域新星创作者&#xff0c;阿里云专家博主&#xff0c;华为云云 享专家博主&#xff0c;掘金后端评审团成员 &#x1f495;前言&#xff1a; 最近云原生领域热火朝天&#xff0c;那么云原生是什么&#xff1f;何为云原生…

excel的frequency函数的用法和实例

目录 1.语法和用法 &#xff08;1&#xff09;语法&#xff1a;frequency(data_array,bins_array) &#xff08;2&#xff09;用法&#xff1a;用于统计指定分组区间的频率&#xff0c;以已裂垂直数组返回一组数据的频率分布。 2.实例 &#xff08;1&#xff09;分组统计各…

【WxPusher消息推送平台】js版对接发送消息教程实战案例,JavaScript版调用axios发送消息实例。保姆级教程

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、WxPusher消息推送平台是什么1、注册自己的WxPusher2、扫码关注应用&#xff0c;获得你的UID二、使用步骤1.封装axios方法2.编写发送消息方法总结前言 WxPus…

Thymeleaf th:insert、th:replace、th:include的使用

参考资料 八、模板布局&#xff08;Template Layout&#xff09;Thymeleaf中th:include、th:replace、th:insert、th:fragment用法及区别Thymeleaf参考手册&#xff08;八&#xff09;&#xff1a;模板布局 目录一. 前期准备二. th:insert三. th:include四. th:replace一. 前期…

【云原生-Docker】常用的 Docker Compose 配置项

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Docker学习专栏 ✨学习社区&#xff1a;&#x1f449;不会压弯的小飞侠 ✨知足上进&#xff0c;不负…

Animation Rigging 如何让你的Avatar人物更具灵活性

文章目录&#x1f388; 简介&#x1f388; 基本组件&#x1f388; 应用Aim ConstraintTwo Bone IK Constraint&#x1f388; 简介 Animation Rigging是Unity官方发布的可以对Avatar人物骨骼进行约束的工具&#xff0c;已经有稳定的经过验证的Vertified包体&#xff0c;可以将其…

认知无线电网络的服务质量——蜻蜓算法的应用(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

【深入浅出Spring6】第七期——使用JDBC模板与代理模式

一、JDBCTemplate JdbcTemplate 是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码Spring也继承了其他持久化的框架&#xff0c;比如 MyBatis 等本篇我们从简单的增删改查角度介绍如何使用Spring提供的这个模板类 $ 准备工作 创建一个新的模块…

livekit 简单上手教程

什么是livekit&#xff1f; livekit是一个开源的webrtc项目&#xff0c;基于pion实现了SFU架构的go程序。 它主要有以下几个特性&#xff1a; 可以水平扩展的sfu架构。有完整的sdk程序接口供开发人员使用。基于JWT进行身份验证&#xff0c;可与大部分系统进行权限集成。内置Tur…

SpringCloud学习笔记 - 分布式配置中心 - config

1. 简介 Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。 它由服务端和客户端构成&#xff1a; 其中&#xff0c;服务端也称为分布式配置中心&#xff0c;是一个独立的微服务应用&#xff0c;用来连接配置仓库、为客户端提供支持…

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下&#xff0c;修改了配置文件&#xff0c;项目需要下架&#xff0c;重新打包&#xff0c;重新发布。这在单机模式下影响不会太大&#xff0c;但如果过在一个集群项目中就会照成很大的影响&#xff0c;需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话&#xff0c;堪称火箭般的蹿升。当阿里来到第十八个年头时&#xff0c;员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时&#xff0c;人数就突破了10万。曾经入职阿里是一票难求&#xff0c;但现在…