
leetcode题解25-K个一组翻转链表
统计链表长度:首先计算链表的总长度,以便确定有多少完整的 k 组可以被翻转。 计算反转次数:反转次数由链表长度除以 k 得到。如果反转次数为 0 或 k 为 1,则直接返回原链表。 使用虚拟头结点:为了简化链表的反转和连接操作,使用虚拟头结点,然后逐步处理每组 k 个节点。 逐个组反转:对于每组 k 个节点,反转它们的顺序,并将反转后的链表连接到下一组的开始位置。 处理剩余节点:如果链表长度不能被 k 整除,剩余的节点保持原有的顺序。 统计链表长度:通过遍历链表,统计节点的总数。 判断特殊情况:如果 k 为 1 或链表长度能被 k 整除,则直接返回原链表。 虚拟头结点:创建一个虚拟头结点来简化链表反转和连接操作。 处理每组反转:对于每组 k 个节点,使用头插法反转该组的顺序,并将反转后的链表插入到正确的位置。 连接节点:确保每次反转后的链表正确连接到下一组的起始位置,保持整体链表结构的连贯性。通过以上步骤,我们可以实现链表每 k 个节点一组的反转,满足题目的所有要求。
发布日期:2025-04-05 05:36:37
浏览次数:9
分类:精选文章
本文共 2098 字,大约阅读时间需要 6 分钟。
要解决这个问题,我们需要将给定的链表按照每 k 个节点一组进行翻转。如果链表长度不能被 k 整除,则最后剩余的节点保持原有顺序。以下是详细的解决方案。
方法思路
解决代码
class Solution { public ListNode reverseKGroup(ListNode head, int k) { // 统计链表长度 int length = 0; ListNode temp = head; while (temp != null) { length++; temp = temp.next; } // 如果k为1或者反转次数为0,直接返回原链表 if (k <= 1 || length % k == 0) { return head; } // 初始化虚拟头结点和当前处理的指针 ListNode nhead = new ListNode(-1); nhead.next = head; ListNode cur_head = nhead; // 保留下一次处理的起始位置 ListNode kNext = head; // 当前已完成的反转次数 int reverseTimes = 0; // 开始反转每组 while (length - reverseTimes * k > k) { // 找到当前组的尾节点 ListNode currentTail = cur_head.next; // 从头节点开始反转这组 // 使用头插法来进行反转 // 反转后的新头节点是当前组的最后一个节点 // currentnode -> next.next -> ... -> currentHead // 将currentHead插入到currentTail的位置 currentTail.next = cur_head.next; // 调整当前组的头和尾 cur_head = cur_head.next; // 新的头节点是第一个元素 currentTail = new ListNode(0); // 为了便于插入 // 将当前组反转插入到currentTail之后 while (cur_head != null && cur_head != nhead.next) { ListNode nextNode = cur_head.next; cur_head.next = currentTail; currentTail = cur_head; cur_head = nextNode; } // 将当前组的最后节点连接到下一个组的头 currentTail.next = kNext; // 调整kNext为下一个未处理的组的开始位置 kNext = cur_head.next; reverseTimes++; } return nhead.next; }}
代码解释
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月26日 19时22分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
LeetCode数据库题目汇总一(附答案)
2025-04-05
LeetCode数据库题目汇总二(附答案)
2025-04-05
LeetCode新手指南:从零开始掌握算法挑战
2025-04-05
LeetCode智加科技专场——第207场周赛题解
2025-04-05
leetcode正则表达式匹配
2025-04-05
leetcode第40题:组合总和II
2025-04-05
leetcode算法题解(Java版)-6-链表,字符串
2025-04-05
LeetCode经典——202.快慢指针之快乐数
2025-04-05
LeetCode经典——70.爬楼梯&&509.斐波拉契数列
2025-04-05
Leetcode经典系列——LRU最近最少使用机制
2025-04-05
LeetCode美团专场——第203场周赛题解
2025-04-05
LeetCode蔚来专场——第208场周赛题解
2025-04-05
leetcode题解-买卖股票的最佳时机
2025-04-05
leetcode题解102-二叉树的层序遍历
2025-04-05
leetcode题解102-翻转二叉树
2025-04-05
leetcode题解104- 二叉树的最大深度
2025-04-05
leetcode题解108-将有序数组转换为二叉排序树
2025-04-05
leetcode题解118-杨辉三角
2025-04-05
leetcode题解131-分割回文串
2025-04-05
leetcode题解136-只出现一次的数字
2025-04-05