25. K 个一组翻转链表

题解参考:https://leetcode.cn/problems/reverse-nodes-in-k-group/solutions/10416/tu-jie-kge-yi-zu-fan-zhuan-lian-biao-by-user7208t/


设置dummy虚拟头节点,pre为待翻转部分的前驱(用于连接),end为待翻转部分中的结尾节点(用k定),next为待翻转部分的后续节点(用于连接),bg为翻转前的翻转部分的开始节点,进入reverse后,会有cur节点作为副本,因此bg的位置不会变,翻转后,bg所在节点变成了结尾,将其和next相连,reverse返回的节点(新开始节点)和pre相连。
pre指向bg,作为下一个待翻转部分的前驱。
end指向pre,从pre出发数k个节点。

java 复制代码
/**
 * 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) {
        ListNode dummy = new ListNode(0, head);
        ListNode pre = dummy, end = dummy;
        while (end.next != null) {
            for (int i = 0; i < k && end != null; ++i) end = end.next; 
            // 注意只要访问next节点,就要检查这个节点是否为空
            if (end == null) break;
            ListNode bg = pre.next;
            ListNode nxt = end.next;
            end.next = null;
            pre.next = reverse(bg);
            bg.next = nxt;
            pre = bg;
            end = pre;
        }
        return dummy.next;
    }
    private ListNode reverse(ListNode head) { 
        ListNode pre = null;
        ListNode cur = head;
        while (cur != null) {
            ListNode nxt = cur.next;
            cur.next = pre;
            pre = cur;
            cur = nxt;
        }
        return pre;
    }
}
相关推荐
weixin_440784116 小时前
【HandlerThread实现原理】
android·java·开发语言
天空'之城6 小时前
C 语言工业级通用组件手写 24:互补滤波
c语言·开发语言·互补滤波·嵌入式算法·工业级组件
leoZ2316 小时前
本地跑大模型实战(七):llama.cpp 性能调优,让推理更快更省
java·人工智能·spring·生成对抗网络·语言模型·自然语言处理·llama
XR1234567886 小时前
工厂车间无线网络方案对比:AGV漫游哪家强?
开发语言·php
傻啦嘿哟6 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
現実君7 小时前
【硬件进阶】AD22上位替换JLEDA教程
开发语言·php
mubei-1237 小时前
SpringDAO的用法
java·开发语言·数据库
happymagic7 小时前
java spring boot做的jar包程序,如何实现自动运行启动
java·运维·服务器·spring boot·jar
小程故事多_808 小时前
从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析
人工智能·算法
2601_956121979 小时前
二分算法(知识点+题目)
c++·算法