[leetcode 25]. K 个一组翻转链表

news/2024/12/22 0:22:58/文章来源:https://www.cnblogs.com/Makerr/p/18446498

题目描述:

https://leetcode.cn/problems/reverse-nodes-in-k-group

给你链表的头节点 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) 额外内存空间的算法解决此问题吗?

解题思路:

 

 

视频讲解:

 

【反转链表】https://www.bilibili.com/video/BV1sd4y1x7KN 

 

和92题反转过程类似,⚠️要创建临时变量nxt保存p0.next,最后更新p0=nxt,开启下一轮循环

代码(C++&Python):

 

class Solution:def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:# 统计链表个数n=0cur=headwhile cur:n+=1cur=cur.nextdummy=ListNode(next=head)p0=dummy# 每次反转前看剩余节点个数是否>=k,>=k则反转,否则不反转while n>=k:n-=kcur=p0.nextpre=Nonefor _ in range(k):nxt=cur.nextcur.next=prepre=curcur=nxt# 保存下一轮循环的上一个节点为p0next=p0.nextp0.next.next=curp0.next=prep0=nextreturn dummy.next
View Code

 

/*** 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:ListNode* reverseKGroup(ListNode* head, int k) {int n=0;ListNode* cur=head;while(cur){n++;cur=cur->next;}ListNode dummy(0,head);ListNode* p0=&dummy;ListNode* nxt=nullptr;ListNode* pre=nullptr;cur=p0->next;while(n>=k){n-=k;for(int i=0;i<k;i++){nxt=cur->next;cur->next=pre;pre=cur;cur=nxt;}ListNode* next=p0->next;p0->next->next=cur;p0->next=pre;p0=next;}return dummy.next;    }
};
View Code

 

思路总结:

做题顺序:

206. 反转链表

24. 两两交换链表中的节点

92. 反转链表 II
25. K 个一组翻转链表
 
由易到难,逐步拓展思路
 
视频讲解:
【反转链表】https://www.bilibili.com/video/BV1sd4y1x7KN 

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

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

相关文章

高三鲜花 #1

flower #1国庆假期,好像因为教育厅进行了一些非常厉害的操作,导致衡中强制放了一周的假。当然有不少人是自愿留校,也有不少人是在家里歇两天就回学校的,我嘛比较摆了就,直接过一整个国庆( 已经经历了一个月的高三生活了。和我之前想象的一样,进入高三后每天晚上我的脑中…

Maven的下载安装(2024最新详细版~)

1. 1、进入Maven的官网地址,下载: Maven – Download Apache Maven2. 解压安装包到自己的安装目录3. 配置环境变量3.1配置到系统Path中3.2验证安装mvn -version 4. 本地仓库和Settings文件配置 4.1、创建自定义仓库,修改settings文件5. AI大模型手册

java 反序列化 cc6 复现

cc6复现环境:common-collections版本<=3.2.1,java版本随意. 我们观察java高于8u71的版本会发现sun.reflect.annotation.AnnotationInvocationHandler类被进行了修改,其中的readObject不去调用setvalue方法,而是创建了一个LinkedHashMap var7去重新进行操作,使我们之前的利用…

20241003

公交车(bus) 显然的题目,答案就是所有连通块的大小减一之和 #include <bits/stdc++.h>using namespace std;#define int long longconst int N = 1e7 + 5;int n, m, fa[N], sz[N], ans;int find(int x) {if (fa[x] == x) {return x;}return fa[x] = find(fa[x]); }void m…

C语言中对象式宏

001、不使用对象式宏[root@localhost test]# ls test.c [root@localhost test]# cat test.c ## 测试程序 #include <stdio.h>int main(void) {int i, sum = 0;int v[5] = {3, 8, 2, 4, 6}; ## 定义int【5】 型数组for(i = 0; i < 5; i…

helm学习

引用案例: 学习连接:https://www.bilibili.com/video/BV12D4y1Y7Z7/?p=7&vd_source=e03131cedc959fdee0d1ea092e73fb24 (时间:06:16)helm新建一个chart,然后删除templates里面的文件,重新编写一个,最后完成发布,更新,回滚动作1,创建一个模版的chart包,删除原来的…

R语言中gene symbol 转换为ENTREZID, clusterprofile富集分析

001、genes <- read.table("genes.txt") ## 读取基因symbol head(genes) tail(genes) genes <- genes[genes != "NA_NA" & genes != "unknow",, drop = FALSE] ## 去除无效信息(可选) genes_list <…

折半查找法的平均查找长度(成功/失败)

转载:https://blog.csdn.net/qq_73966979/article/details/131354005

Leetcode 1498. 满足条件的子序列数目

1.题目基本信息 1.1.题目描述 给你一个整数数组 nums 和一个整数 target 。 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。 由于答案可能很大,请将结果对 109 + 7 取余后返回。 1.2.题目地址 https://leetcode.cn/problem…

Nuxt.js 应用中的 app:beforeMount 钩子详解

title: Nuxt.js 应用中的 app:beforeMount 钩子详解 date: 2024/10/4 updated: 2024/10/4 author: cmdragon excerpt: app:beforeMount 是一个强大的钩子,允许开发者在用户界面挂载前控制应用的初始化过程。通过有效利用这一钩子,我们可以优化应用的用户体验,保持状态一致…

[leetcode 92] 反转链表 II

题目描述: https://leetcode.cn/problems/reverse-linked-list-ii 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。示例 1:输入:head = [1,2,3,4,5], left = 2, right = 4…

Vue3的项目搭建

有两种方式可以搭建: 一:使用vue-cli中的webpack创建 第二:推荐使用vite来创建项目 vite是新一代前端构建工具,新的前端构建工具,比webpack要快一些。 npm create vue@latest 创建完项目后,我们可以看到项目最外层有index.htmlVite项目中,index.html是项目的入口文件,在…