【链表】Leetcode K个一组翻转链表

题目讲解

25. K 个一组翻转链表
在这里插入图片描述


算法讲解

虽然这道题是一道困难题,但是从代码层面很简单,只是一道简单的模拟:我们要先求出总共需要翻转的链表有多少组(链表的长度 / k),接下来就是翻转k的链表最链接的问题

翻转n个链表我们使用头插法,注意:当第一组链表翻转完成之后,我们就不能在使用上一次的头插法的头结点了,就需要在新的链表的尾结点使用头插法,所以我们每一次在翻转当前组链表的时候需要记录翻转完成之后的尾结点,这个尾结点特别好找,就是当前链表组的首节点,使用prev变量记录下来就行

/*** Definition for singly-linked list.* 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) {}* };*/
class Solution {
public:int ListNodeLength(ListNode* head){if(head == nullptr)return 0;return 1 + ListNodeLength(head->next);}ListNode* reverseKGroup(ListNode* head, int k) {//需要翻转几个链表组int n = ListNodeLength(head) / k;//使用头插法 翻转链表ListNode* newhead = new ListNode(-1);ListNode*phead = newhead;//prev记录翻转之后最后一个节点ListNode* prev = nullptr;ListNode* cur = head;ListNode* Next = cur->next;for(int i = 0; i < n; i++){//这个for是遍历需要翻转的链表组prev = cur;  //记录翻转之后的尾结点int cnt = k;while(cnt--){cur->next = phead->next;phead->next = cur;cur = Next;if(Next)Next = Next->next;}//走到这里一个链表组的翻转链接工作已经完成  需要从新的链表的尾节点开始链接下一组翻转链表phead = prev;}//走到这里说明翻转的链表组全部链接完成  之后链接剩余的链表phead->next = cur;phead = newhead->next;delete newhead;return phead;}
};

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

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

相关文章

【JAVA】PO、VO、DAO、BO、DTO、POJO你分得清吗?

在Java开发中&#xff0c;PO、VO、DAO、BO、DTO、POJO这些词汇是比较常见的&#xff0c;每个术语都有其特定的含义和用途。下面是它们的具体区别&#xff1a; 名称简要概况用途和特定PO (Persistence Object) 持…

SpringBoot+vue开发记录(二)

说明&#xff1a;本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目&#xff1a; 如下&#xff0c;这样简单创建就行了&#xff0c;JDK什么的就先17&#xff0c;当然1.8也是可以的&#xff0c;后面可以改。 这样就创建好了&#xff1a; 2. pom.xml…

JVM(Jvm如何管理空间?对象如何存储、管理?)

Jvm如何管理空间&#xff08;Java运行时数据区域与分配空间的方式&#xff09; ⭐运行时数据区域 程序计数器 程序计数器&#xff08;PC&#xff09;&#xff0c;是一块较小的内存空。它可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机的多线程是通过时间片轮转调…

bugfix: com.alibaba.druid.sql.parser.EOFParserException: EOF

前言 在日常的开发工作中&#xff0c;我们经常会遇到各种各样的问题&#xff0c;其中涉及数据库操作的接口联调尤其容易出现意想不到的状况。今天我就遇到了一个关于Druid SQL解析异常的问题&#xff0c;具体表现为com.alibaba.druid.sql.parser.EOFParserException: EOF。通过…

基于SpringBoot开发的同城租房系统租房软件APP小程序源码

项目背景 一、市场前景 随着城市化进程的加快和人口流动性的增强&#xff0c;租房市场正逐渐成为一个不可忽视的巨大市场。传统的租房方式往往存在着信息不对称、效率低下等问题&#xff0c;而同城租房软件的出现&#xff0c;则有效地解决了这些问题&#xff0c;为租房市场注…

为什么近年来机器学习这么火!!

机器学习&#xff08;Machine Learning&#xff09;是一种人工智能&#xff08;AI&#xff09;的分支&#xff0c;它让计算机能够通过数据学习和改进&#xff0c;而无需明确的编程。这意味着机器学习系统可以从经验中学习&#xff0c;逐步提高其性能。它基于统计学和数学算法&a…

《欢乐钓鱼大师》攻略,钓友入坑必备!

欢迎来到《欢乐钓鱼大师》&#xff01;在这个游戏里&#xff0c;你可以尽情享受垂钓的乐趣&#xff0c;通过不断更换和升级高阶鱼竿&#xff0c;轻松地钓到各种稀有鱼类。因为许多玩家在挑战关卡时遇到了一些困难&#xff0c;所以今天我给大家带来了《欢乐钓鱼大师攻略指南》&a…

【产品经理修炼之道】- 消金支付体系

我们常听说“互联网的尽头是放贷”&#xff0c;而当支付与金融结合会衍生出各种场景。本文将给大家拆解下不同消费金融场景下的支付案例&#xff0c;一起来看看吧。 各位小伙伴&#xff0c;大家好&#xff01; 我们常听说“互联网的尽头是放贷”&#xff0c;确实这说其实话糙…

Springboot 中RedisTemplate使用scan来获取所有的key底层做了哪些事情

直接上代码&#xff0c;围绕着代码来讨论 redisTemplate.execute((RedisCallback<Object>) (connection) -> {Cursor<byte[]> scan connection.scan(ScanOptions.scanOptions().count(2).match("*").build());scan.forEachRemaining((bytes) -> {…

通信原理(2)--随机过程

通信原理(2)–随机过程 3.1随机过程的基本概念 随机过程{x(t)}由一族时间函数 x i ( t ) x_i(t) xi​(t)&#xff0c;i1,2.3…组成&#xff0c;每一个时间函数 x i ( t ) x_i(t) xi​(t)称为随机过程{x(t)}的一个样本函数&#xff08;一个实现&#xff09; 每个样本函数在时间…

Java设计模式 _结构型模式_适配器模式

一、适配器模式 **1、适配器模式&#xff08;Adapter Pattern&#xff09;**是一种结构型设计模式。适配器类用来作为两个不兼容的接口之间的桥梁&#xff0c;使得原本不兼容而不能一起工作的那些类可以一起工作。譬如&#xff1a;读卡器就是内存卡和笔记本之间的适配器。您将…

C语言笔试题之找出数组的最大公约数

找出数组的最大公约数 实例要求 1、给定一个整数数组 &#xff0c;返回数组中最大数和最小数的最大公约数&#xff1b;2、两个数的最大公约数是能够被两个数整除的最大正整数&#xff1b;示例&#xff1a; 实例分析 1、要找到数组中最大数和最小数的最大公约数&#xff1b…