day39(12.20)——leetcode面试经典150

25. K 个一组翻转链表

25. K个一组翻转链表

这题有点难啊啊啊啊,怎么会有人能这样想到,这也太聪明了吧啊啊啊

题目:

题解:

java 复制代码
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null || k <= 1) return head;

        // Step 1: 创建虚拟头节点
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prev = dummy; // prev 始终指向当前组的前一个节点

        // Step 2: 计算链表总长度(可选,也可以在每轮检查 k 个节点)
        int length = 0;
        ListNode cur = head;
        while (cur != null) {
            length++;
            cur = cur.next;
        }

        // Step 3: 处理 fullGroups = length / k 个完整组
        int fullGroups = length / k;
        for (int i = 0; i < fullGroups; i++) {
            // start 是当前组的第一个节点
            ListNode start = prev.next;
            // then 是 start 的下一个,即将被"头插"的节点
            ListNode then = start.next;

            // 执行 k-1 次头插操作
            for (int j = 0; j < k - 1; j++) {
                // 1. start 跳过 then,连到 then 的下一个
                start.next = then.next;
                // 2. then 插到 prev 后面
                then.next = prev.next;
                prev.next = then;
                // 3. then 移动到下一个待处理节点
                then = start.next;
            }

            // 一轮反转结束,prev 移动到本组的最后一个节点(即原来的 start)
            prev = start;
        }

        return dummy.next;
    }
}
相关推荐
源代码•宸5 小时前
Leetcode—712. 两个字符串的最小ASCII删除和【中等】
开发语言·后端·算法·leetcode·职场和发展·golang·dp
小当家.1055 小时前
JVM八股详解(上部):核心原理与内存管理
java·jvm·学习·面试
heartbeat..5 小时前
Spring 声明式事务:原理、使用及失效场景详解
java·spring·面试·事务
xiaoxue..5 小时前
把大模型装进自己电脑:Ollama 本地部署大模型完全指南
javascript·面试·node.js·大模型·ollama
无限进步_5 小时前
【C语言&数据结构】相同的树:深入理解二叉树的结构与值比较
c语言·开发语言·数据结构·c++·算法·github·visual studio
java修仙传5 小时前
力扣hot100:每日温度
算法·leetcode·职场和发展
咚咚王者5 小时前
人工智能之核心基础 机器学习 第十章 降维算法
人工智能·算法·机器学习
源代码•宸5 小时前
Golang语法进阶(Context)
开发语言·后端·算法·golang·context·withvalue·withcancel
源代码•宸5 小时前
Golang语法进阶(Sync、Select)
开发语言·经验分享·后端·算法·golang·select·pool
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章8-形态学
人工智能·深度学习·opencv·算法·计算机视觉