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


    目录
    相关文章
    |
    4月前
    【力扣】-- 移除链表元素
    【力扣】-- 移除链表元素
    51 1
    |
    4月前
    |
    索引
    力扣(LeetCode)数据结构练习题(3)------链表
    力扣(LeetCode)数据结构练习题(3)------链表
    121 0
    |
    4月前
    LeetCode第二十四题(两两交换链表中的节点)
    这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
    43 0
    LeetCode第二十四题(两两交换链表中的节点)
    |
    4月前
    Leetcode第21题(合并两个有序链表)
    这篇文章介绍了如何使用非递归和递归方法解决LeetCode第21题,即合并两个有序链表的问题。
    65 0
    Leetcode第21题(合并两个有序链表)
    |
    4月前
    Leetcode第十九题(删除链表的倒数第N个节点)
    LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
    54 0
    Leetcode第十九题(删除链表的倒数第N个节点)
    |
    4月前
    【LeetCode 10】142. 环形链表 II
    【LeetCode 10】142. 环形链表 II
    34 0
    |
    4月前
    【LeetCode 09】19 删除链表的倒数第 N 个结点
    【LeetCode 09】19 删除链表的倒数第 N 个结点
    25 0
    |
    4月前
    【LeetCode 08】206 反转链表
    【LeetCode 08】206 反转链表
    23 0
    |
    4月前
    【LeetCode 06】203.移除链表元素
    【LeetCode 06】203.移除链表元素
    41 0
    |
    4月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java

    热门文章

    最新文章