首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >LeetCode 25. K 个一组翻转链表

LeetCode 25. K 个一组翻转链表

作者头像
程序员三明治
发布2025-12-18 20:33:14
发布2025-12-18 20:33:14
220
举报
文章被收录于专栏:码力up码力up
题目

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

代码语言:javascript
复制
输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:

代码语言:javascript
复制
输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]
思路
  1. 计算长度:先遍历链表获取总节点数 n
  2. 虚拟头节点和p0节点:创建 dummyHead 处理边界情况;使用 p0 指针记录每组前驱节点(核心:通过 p0 指针巧妙处理组间连接,确保反转后的链表正确衔接)
  3. 分组反转:while循环(n >= k),里面for循环反转每组K个节点
  4. 组间连接
    • p0.next.next = cur → 连接反转后的尾节点与下一组头节点
    • p0.next = pre → 连接前驱节点与反转后的头节点
    • p0 = next → 移动p0到下一组的前驱位置
题解
代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        // 先数一下这个链表的长度
        int n = 0;
        for (ListNode node = head; node != null; node = node.next) {
            n++;
        }
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode p0 = dummyHead;
        ListNode cur = head;
        ListNode pre = null;
        while (n >= k) {
            // 反转链表的操作
            for (int i = 0; i < k; i++) {
                ListNode tmp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = tmp;
            }
            // 每组之间的连接
            ListNode next = p0.next;
            p0.next.next = cur;
            p0.next = pre;
            p0 = next;

            n -= k;
        }
        return dummyHead.next;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
    • 题解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档