25. K 个一组翻转链表

wuchangjian2021-11-03 22:11:53编程学习

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

k 是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

我的思路是先写出翻转链表的前k个节点,然后分组执行该方法后再重新连起来

代码如下:

class Solution {

    public ListNode reverseKGroup(ListNode head, int k) {

    

        ListNode preHead = new ListNode(-1);

        ListNode result = reverseK(head, k);

        preHead.next = result;

        ListNode pre = preHead;

        

        while (result != null){

            int num = k;

            while (num > 0){

                pre = pre.next;

                result = result.next; 

                num--;

            }

            for (int i = 0; i < k; i++) {

                if (result == null){

                    return preHead.next;

                }

                result = result.next;

            }

            result = reverseK(pre.next, k);

            pre.next = result;

        }

        return preHead.next;

    }

    //翻转长度为k的链表

    public ListNode reverseK(ListNode head,int k){

        ListNode pre = new ListNode(-1);

        pre.next = head;

        if (head.next == null || k == 1){

            return head;

        }

        ListNode tail = head.next;

        while (k > 1 && tail != null){

            head.next = tail.next;

            tail.next = pre.next;

            pre.next = tail;

            tail = head.next;

            k--;

        }

        return pre.next;

    }

}

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。