LeetCode:25. K 个一组翻转链表

news/2025/2/9 13:19:02/

25. K 个一组翻转链表

  • 1)题目
  • 2)思路
  • 3)代码
  • 4)结果

1)题目

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-nodes-in-k-group
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2)思路

例子:head = [1,2,3,4], k = 3

(length -= k) >= 0 true        (length -= k) >= 0 false    retuen 3 -> 2 -> 1 -> 4;
初始 1 -> 2 -> 3 -> 4
head   s    ew    
第一轮翻转之后2 -> 1 -> 3 -> 4
head   e    s    w  
listNode = start;2 -> 1 -> 3 -> 4
head        s    ew       
第二轮翻转3 -> 2 -> 1 -> 4
head   e         s    w  
listNode = start;3 -> 2 -> 1 -> 4
head             s    ew  

3)代码

public static ListNode reverseKGroup(ListNode head, int k) {if (k == 1) return head;ListNode headNode = new ListNode();headNode.next = head;ListNode listNode = headNode;// 计算链表长度int length = 0;while (head != null) {head = head.next;++length;}while ((length -= k) >= 0) {ListNode start = listNode.next;for (int i = 0; i < k - 1; i++) {	// k个进行翻转,翻转k-1次ListNode wait = listNode.next;  // 该节点始终指向头结点的后一位ListNode end = start.next;listNode.next = end;start.next = end.next;end.next = wait;}listNode = start;}return headNode.next;
}

4)结果

在这里插入图片描述


http://www.ppmy.cn/news/74116.html

相关文章

std::thread使用

std::thread使用 join & detachjoinable() 函数代码演示主线程不做操作joindetach join & detach 定义区别&#xff1a; join 会阻塞&#xff0c;调用线程等待子线程执行完毕&#xff0c;然后再往下执行detach 分离&#xff0c;调用线程不再等待子线程结束&#xff0…

【牛客刷题专栏】0x30:JZ38 字符串的排列(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

管中窥豹!从冠德石油看数字化对加油站的影响力

从上个世纪90年代起&#xff0c;至2010年前后&#xff0c;是国内信息化建设的高速发展期。这段时间无论是应用软件、企业网站还是商业咨询&#xff0c;无不呈现井喷式发展。大多数企业和政府机关均完成了或多或少的信息化建设。IT带来了标准化、科学化的管理和运作模式&#xf…

当Python遇上异步编程:实现高效、快速的程序运行!

前言 同步/异步的概念&#xff1a; 同步是指完成事务的逻辑&#xff0c;先执行第一个事务&#xff0c;如果阻塞了&#xff0c;会一直等待&#xff0c;直到这个事务完成&#xff0c;再执行第二个事务&#xff0c;顺序执行 异步是和同步相对的&#xff0c;异步是指在处理调用这…

C++——内存管理+模块

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月19日 内容&#xff1a;C——内存管理模块 目录 前言&#xff1a; 1.new和delete操作自定义类型&#xff1a; operator new/delete&#xff1a; 定位new表达式&#xff08;placement-new&#xff09;&#xff1a; …

Lucene(4):Field域类型

1 Field属性 Field是文档中的域&#xff0c;包括Field名和Field值两部分&#xff0c;一个文档可以包括多个Field&#xff0c;Document只是Field的一个承载体&#xff0c;Field值即为要索引的内容&#xff0c;也是要搜索的内容。 是否分词(tokenized) 是&#xff1a;作分词处理…

Git的项目管理工具的使用

Git的项目管理工具的使用 为什么学习Git软件&#xff1f; 主流开发中&#xff0c;基于互联网的开发项目都会使用git进行资源管理 资源管理&#xff1a;人力资源 ​ 代码资源 : .java .c . js 等 ​ 文档资源 &#xff1a; doc.md ,pdf 等 git是最常用的scm软件&#xff08;Soft…

软考初级程序员上午单选题(15)

1、在目前流行的大多数PC中&#xff0c;硬盘一般是通过硬盘接口电路连接到______。 A&#xff0e;CPU局部总线 B&#xff0e;PCI总线 C&#xff0e;ISA总线(AT总线) D&#xff0e;存储器总线 2、松耦合多处理机实现处理机间通信靠的是______。 A&#xff0e;共享主存 B&#x…