25-K 个一组翻转链表

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

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

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

示例:

给你这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

作者亲测可直接运行!!!!!!!!

class Solution {
    public static ListNode reverseKGroup(ListNode head, int k) {
        if (head == null || k == 0) {
            return head;
        }

        ListNode prevGroupLast = new ListNode(-1);
        prevGroupLast.next = head;

        ListNode root = prevGroupLast;
        ListNode cur = prevGroupLast.next;
        ListNode curGroupFirst = null;
        ListNode prev = null;
        int i = 0;

        while (cur != null) {
            ListNode next = cur.next;
            if (i < k) {
                if (i == 0) {
                    curGroupFirst = cur;
                }
                cur.next = prev;
                prev = cur;
                cur = next;
                i++;
            } else {
                prevGroupLast.next = prev;
                prevGroupLast = curGroupFirst;
                i = 0;
                prev = null;
            }
        }

        if (i < k) {
            cur = prev;
            prev = null;

            while (cur != null) {
                ListNode next = cur.next;
                cur.next = prev;

                prev = cur;
                cur = next;
            }

            prevGroupLast.next = curGroupFirst;
        } else {
            prevGroupLast.next = prev;
        }

        return root.next;
    }


    public static void printListNode(ListNode l) {
        while (null != l) {
            System.out.println(l.val);
            l = l.next;
        }
    }


    public static void main(String[] args) {
        ListNode listNode1 = new ListNode(1, new ListNode(4, new ListNode(8, new ListNode(9, new ListNode(6)))));
        ListNode resultListNode = reverseKGroup(listNode1,3);
        printListNode(resultListNode);
    }
}

class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

猜你喜欢

转载自blog.csdn.net/lss446937072/article/details/109609329