25. K 个一组翻转链表 --力扣 --JAVA

简介: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

 题目

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

解题思路

    1. 先排除特殊情况,k==1即不用翻转,节点为null则当前函数内也不需要翻转;
    2. 统计是否有k个数据来判断是否需要翻转;
    3. 通过while循环对k个节点进行翻转,尾节点传入下一次递归当中;
    4. 返回首节点,并赋值给上一个尾节点的next。

    代码展示

    class Solution {
        public ListNode reverseKGroup(ListNode head, int k) {
            if(k == 1){
                return head;
            }
            if(head == null){
                return null;
            }
            int index = 1;
            ListNode end = head.next;
            //判断是否需要继续翻转
            boolean status = false;
            while (end != null){
                index++;
                if(index == k){
                    status = true;
                    break;
                }
                //递归需要传递的数据
                end = end.next;
            }
            if(status){
                ListNode before = end.next;
                ListNode now = head;
                index = 0;
                while (index < k){
                    ListNode temp = now.next;
                    now.next = before;
                    before = now;
                    now = temp;
                    index++;
                }
                head.next = reverseKGroup(head.next, k);
            } else {
                return head;
            }
            return end;
        }
    }

    image.gif


    目录
    相关文章
    |
    3天前
    |
    算法 Java C语言
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
    |
    3天前
    【移除链表元素】LeetCode第203题讲解
    【移除链表元素】LeetCode第203题讲解
    |
    3天前
    LeetCode链表hard 有思路?但写不出来?
    LeetCode链表hard 有思路?但写不出来?
    |
    3天前
    |
    索引
    每日一题:力扣328. 奇偶链表
    每日一题:力扣328. 奇偶链表
    14 4
    |
    3天前
    leetcode代码记录(翻转二叉树
    leetcode代码记录(翻转二叉树
    7 0
    |
    3天前
    leetcode代码记录(移除链表元素
    leetcode代码记录(移除链表元素
    10 0
    【每日一题】LeetCode——反转链表
    【每日一题】LeetCode——反转链表
    【每日一题】LeetCode——链表的中间结点
    【每日一题】LeetCode——链表的中间结点
    |
    3天前
    |
    C++
    [leetcode 链表] 反转链表 vs 链表相交
    [leetcode 链表] 反转链表 vs 链表相交
    |
    3天前
    【力扣】148. 排序链表
    【力扣】148. 排序链表