LeetCode:25K个一组翻转链表

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);
        dummy.next = head;

        ListNode prev = dummy;
        ListNode end  = dummy;

        while(end.next != null){
            //将end指针移动k步找到本组的尾
            for(int i = 0; i < k && end != null; i++){
                end = end.next;
            }
            if(end == null) break;

            //将本组与后面进行切割
            ListNode start = prev.next;
            ListNode nextGroup = end.next;
            end.next = null;

            //进行局部翻转
            prev.next = reverseList(start);
            //将反转后的节点与后续连接起来
            start.next = nextGroup;

            //为下组做准备
            prev = start;
            end = prev;
        }
        return dummy.next;
    }
    //翻转链表
    private ListNode reverseList(ListNode head){
        ListNode prev = null;
        ListNode curr = head;

        while(curr != null){
            ListNode nextTemp = curr.next;
            curr.next = prev;
            prev = curr;
            curr = nextTemp;
        }
        return prev;
    }
}

设置prev和end节点为当前要翻转组的前驱节点和最后节点

设置start和nextGroup节点,用于切割待翻转节点组和连接后续节点。

写一个反转链表的函数进行调用

最后prev和end节点移动到第二组需要翻转的节点组

相关推荐
To_OC7 小时前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode
金銀銅鐵10 小时前
[Python] 扩展欧几里得算法
python·数学·算法
To_OC13 小时前
LC 200 岛屿数量:经典 DFS 入门题,我第一次写居然连方向都搞错了
javascript·算法·leetcode
To_OC1 天前
LC 128 最长连续序列:别上来就排序,O (n) 解法才是这题的灵魂
javascript·算法·leetcode
05Kevin2 天前
lk每日冒险题--数据结构6.27
算法
To_OC2 天前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
千纸鹤安安2 天前
千问Qwen-AgentWorld来了:一个语言模型搞定七大Agent场景,GPT-5.4都输了
算法
七牛开发者3 天前
MCP 到底是什么?为什么 Agent 都想接上它
算法·aigc·agent