链表中的节点每k个一组翻转
题目
将给出的链表中的节点每 k 个一组翻转,返回翻转后的链表
如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样
你不能更改节点中的值,只能更改节点本身。
要求空间复杂度 O(1)
例如:
给定的链表是1→2→3→4→5
对于 k=2, 你应该返回 2→1→4→3→5
对于 k=3, 你应该返回 3→2→1→4→5
题目分析
这里我借用一个大神化的过程图,写的真好看
思路:先计算链表长度根据k计算需要翻转几轮,每一轮就采取头插法实现翻转
代码(有注释):
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
if(head==null||head.next==null||k<2){
return head;
}
//构造一个新的头节点,方便返回值时找到反转后链表的头节点。
ListNode res = new ListNode(0);
res.next = head;
//定义三个指针
ListNode pre = res,cur=head,tmp=null;
//链表长度
int length = 0;
while(head!=null){
length++;
head = head.next;
}
//循环几次,每次k个,这里也是采用头插法的方式
//pre作为每一小段链表的头节点,负责衔接
for(int i = 0;i<length/k;i++){
for(int j=1;j<k;j++){
tmp = cur.next;
cur.next = tmp.next;
tmp.next = pre.next;
pre.next = tmp;
}
//每个子序列反序完成后,pre,cur需要更新至下一子序列的头部
pre = cur;
cur = cur.next;
}
return res.next;
}
本文来自博客园,作者:Diamond-fz,转载请注明原文链接:https://www.cnblogs.com/fzstudy/p/14667173.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下