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节点移动到第二组需要翻转的节点组

相关推荐
啊哦呃咦唔鱼2 小时前
LeetCodehot100-394 字符串解码
算法
小欣加油2 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼2 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode
逻辑驱动的ken3 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
帅小伙―苏4 小时前
力扣42接雨水
前端·算法·leetcode
AI科技星4 小时前
精细结构常数α的几何本源:从第一性原理的求导证明、量纲分析与全域验证
算法·机器学习·数学建模·数据挖掘·量子计算
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 287. 寻找重复数 | C++ 数组判环 (快慢指针终极解法)
c++·算法·leetcode
MegaDataFlowers4 小时前
26.删除有序数组中的重复项
算法
故事和你915 小时前
洛谷-数据结构1-4-图的基本应用2
开发语言·数据结构·算法·深度优先·动态规划·图论