leetCode刷题 25.K 个一组翻转链表

目录

1.思路:

2.解题方法:

3.复杂度:

4.Code


题目:

给你链表的头节点 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.思路:

使用虚拟头节点 dummy 方便处理边界情况。

然后,遍历链表,每次找到待翻转区间的前驱节点 prev 和尾节点 tail

判断剩余节点数量是否大于等于 k

若是,则翻转当前区间并接入到原链表中;

若不是,则说明剩余节点数量不足 k 个,不需要翻转。

2.解题方法:

         定义一个辅助函数 reverse,用于翻转给定区间的链表,并返回翻转后的头尾节点。在主函数中,遍历链表,每次找到待翻转区间的前驱节点和尾节点,调用 reverse 函数进行翻转,并将翻转后的区间接入到原链表中。

3.复杂度:

        时间复杂度:O(N),其中 N 是链表的长度。这是因为我们需要遍历整个链表,并且每次处理的区间长度最多为 k,因此总的时间复杂度为线性的。

        空间复杂度:O(1)。

4.Code

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        // 创建一个虚拟头节点,方便处理边界情况
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        
        ListNode prev = dummy; // 指向当前待翻转区间的前驱节点
        while (head != null) {
            ListNode tail = prev; // 指向当前待翻转区间的尾节点
            
            // 判断剩余节点数量是否大于等于 k
            for (int i = 0; i < k; i++) {
                tail = tail.next;
                if (tail == null) return dummy.next; // 剩余节点数量不足 k 个,不需要翻转
            }
            
            // 待翻转区间的下一个节点
            ListNode nextGroup = tail.next;
            
            // 翻转当前区间
            ListNode[] reversed = reverse(head, tail);
            head = reversed[0];
            tail = reversed[1];
            
            // 将翻转后的区间接入到原链表中
            prev.next = head;
            tail.next = nextGroup;
            
            // 更新 prev 和 head,准备翻转下一个区间
            prev = tail;
            head = tail.next;
        }
        
        return dummy.next;
    }
    
    // 辅助函数:翻转给定区间的链表,并返回翻转后的头尾节点
    private ListNode[] reverse(ListNode head, ListNode tail) {
        ListNode prev = tail.next;
        ListNode curr = head;
        while (prev != tail) {
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return new ListNode[]{tail, head};
    }
}

        这段代码实现了将给定链表每 k 个节点一组进行翻转的功能。具体来说,对于给定的链表头节点 head 和正整数 k,函数会将链表中每 k 个节点进行翻转,并返回修改后的链表头节点。

如果节点总数不是 k 的整数倍,则最后剩余的节点保持原有顺序。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

补充知识

补充知识1 内存的本质是对数据的临时存储 内存与磁盘进行交互时&#xff0c; 最小单位是4kb叫做页框(内存)和页帧(磁盘) 也就是&#xff0c; 如果我们要将磁盘的内容加载到内存中&#xff0c; 可是文件大小只有1kb&#xff0c; 我们也要拿出4kb来存他&#xff0c; 多余的就直…

简单的弱口令密码字典!!!

将下面的复制到文本文档即可&#xff01;&#xff01;&#xff01; 弱口令密码字典一&#xff1a; %null% %username% !#$ !#$% !#$%^ !#$%^& !#$%^&* 000000 00000000 0123456789 1 101010 111 111111 1111111 11111111 1111111111 111222 112233 11223344 121212 121…

JAVA8 新特性StreamAPI使用(二)

一、使用StreamAPI&#xff0c;&#xff08;基于数据模型——客户、订单和商品&#xff0c;实体关系图如下&#xff0c;客户可以有多个订单&#xff0c;是一对多的关系&#xff0c;而产品和订单的关系是多对多的&#xff09;需求如下&#xff1a; 二、Stream API思维导图 三、需…

file_get_contents(‘php://input‘); 这个postman要如何传参

在 Postman 中传递参数给 file_get_contents(php://input); 是通过请求的 Body 部分来实现的。使用 Postman 进行 API 接口测试时&#xff0c;可以按照以下步骤来传递参数&#xff1a; 打开 Postman 并创建一个新的请求。在请求的 URL 地址栏输入你的 API 地址。选择请求方法为…

【Python面试题收录】Python的深浅拷贝

一、Python的深浅拷贝的区别 在Python中&#xff0c;深拷贝和浅拷贝是两种不同的对象复制机制&#xff0c;它们的主要区别在于如何处理对象内部所包含的可变或不可变类型的子对象。 浅拷贝 是指创建一个新的对象&#xff0c;但它只复制了原对象的第一层内容&#xff0c;也就是说…

基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1无刷直流电机模型与速度控制 4.2 模糊PID控制器设计 5.完整工程文件 1.课题概述 基于模糊PID控制器的的无刷直流电机速度控制simulink建模与仿真。基于模糊PID控制器的无刷直流电机&#xff08;Brus…

并发编程01-深入理解Java并发/线程等待/通知机制

为什么我们要学习并发编程&#xff1f; 最直白的原因&#xff0c;因为面试需要&#xff0c;我们来看看美团和阿里对 Java 岗位的 JD&#xff1a; 从上面两大互联网公司的招聘需求可以看到&#xff0c; 大厂的 Java 岗的并发编程能力属于标配。 而在非大厂的公司&#xff0c; 并…

Redis的高可用和持久化

目录 一、Redis高可用 二、Redis持久化 2.1 持久化的功能 2.2 Redis提供两种方式进行持久化 三、RDB持久化 3.1 触发条件 3.1.1 手动触发 3.1.2 自动触发 3.1.3 其他自动触发机制 四、AOF持久化 4.1 开启AOF 4.2 执行流程 4.2.1 命令追加 (append) 4.2.2 文件写入…

蓝桥杯-单片机基础13——完美代码:官方开发板超声波传感器详解(超声波传感器CX20106A)

蓝桥杯单片机组备赛指南请查看 &#xff1a;本专栏第1篇文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K61S2 &#xff08;使…

实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(二、三)

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 实验二&#xff1a; 1. 为nvme0n2p1设备建立配额属性和文件(EXT) 2. 要求自己名字的用户只能存储不超过200M的文件&#xff0c;总数量不能大于10个 quotacheck [选项] 文件系统 edquota quotaon [选项] 文件系…

全志 Linux Qt

一、简介 本文介绍基于 buildroot 文件系统的 QT 模块的使用方法&#xff1a; • 如何在 buildroot 工具里编译 QT 动态库&#xff1b; • 编译及运行 qt_demo 应用程序&#xff1b; • 适配过程遇到的问题。 二、QT动态库编译 在项目根路径执行 ./build.sh buildroot_menuc…

蓝桥杯—DS1302

目录 1.管脚 2.时序&官方提供的读写函数 3.如何使用读写函数 4.如何在数码管中显示在DS1302中读取出的数据&#xff1f; 1.管脚 2.时序&官方提供的读写函数 /* # DS1302代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。2. 参赛选手可以自行…

Python网络爬虫(一):HTML/CSS/JavaScript介绍

1 HTML语言 1.1 HTML简介 HTML指的是超文本标记语言&#xff1a;HyperText Markup Language&#xff0c;它不是一门编程语言&#xff0c;而是一种标记语言&#xff0c;即一套标记标签。HTML是纯文本类型的语言&#xff0c;使用HTML编写的网页文件也是标准的文本文件&#xff0c…

代码重用攻击及栈溢出攻击

攻击一个软件曾经就像找到一个缓冲区溢出漏洞一样简单&#xff0c;用要执行的任意代码填充缓冲区并替换返回地址以指向这个新代码的开头。幸运的是&#xff0c;我们现在防止内存区域既可写又可执行&#xff0c;攻击者要么不能覆盖现有的代码&#xff0c;要么不能执行他们注入的…

蓝桥杯 204/4/2

目录 蚂蚁感冒 “蓝桥杯”练习系统 (lanqiao.cn) 时间显示 “蓝桥杯”练习系统 (lanqiao.cn) 蚂蚁感冒 “蓝桥杯”练习系统 (lanqiao.cn) 思路借鉴&#xff1a;AcWing 1211. 蚂蚁感冒 - AcWing 完整代码&#xff1a; #include <bits/stdc.h> #define int long lon…

蓝桥杯第八届c++大学B组详解

目录 1.购物单 2.等差素数列 3.承压计算 4.方格分割 5.日期问题 6.包子凑数 7.全球变暖 8.k倍区间 1.购物单 题目解析&#xff1a;就是将折扣字符串转化为数字&#xff0c;进行相加求和。 #include<iostream> #include<string> #include<cmath> usin…

ABC319 G - Counting Shortest Paths

解题思路 按照到的距离远近&#xff0c;进行分层为第一层分层步骤&#xff1a;用一个集合记录还未定层的点&#xff0c;用逐层确定对于当前点与其有连边的&#xff08;不是删边&#xff09;且还未确定的点&#xff0c;确定为的下一层&#xff0c;入队列没连边且还未确定的点&a…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元&#xff0c;具有很好的预率性能&#xff0c;符合AEC-0200标准&#xff0c;其封装尺寸仅为3.2x2.5x0.7mm&#xff0c;工作温度范围在-40℃~125℃之间&…

市场复盘总结 20240402

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 50% 最常用的二…

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09;修复优…