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;
    }
}
相关推荐
科学最TOP2 小时前
xLSTM-Mixer:基于记忆混合的多变量时间序列预测
大数据·人工智能·算法·机器学习·时间序列
xlq223222 小时前
29.哈希(下)
算法·哈希算法·散列表
阿昭L2 小时前
leetcode链表是否有环
算法·leetcode·链表
yaoh.wang3 小时前
力扣(LeetCode) 83: 删除排序链表中的重复元素 - 解法思路
程序人生·算法·leetcode·链表·面试·职场和发展
阿昭L3 小时前
leetcode旋转链表
算法·leetcode·链表
山楂树の3 小时前
有效的括号(栈)
数据结构·算法
im_AMBER3 小时前
Leetcode 81 【滑动窗口(定长)】
数据结构·笔记·学习·算法·leetcode
xu_yule3 小时前
算法基础(背包问题)-完全背包
c++·算法·动态规划·完全背包
x976663 小时前
使用 HMAC-SHA256算法对MCU UID进行加密
单片机·嵌入式硬件·算法