public ListNode reverseKGroup(ListNode head, int k) {

        ListNode dummy = new ListNode(0);
        dummy.next = head;
        head = dummy;

        while (head != null) {
            head = reverseK(head, k);
        }
        return dummy.next;
    }
    //head -> n1 -> n2 ... nk->nk+1
    //head -> nk -> nk-1...n2 -> n1 -> nk+1
    public ListNode reverseK(ListNode head, int k) {
        ListNode n1 = head.next;
        ListNode nk = head;
        for (int i = 0; i < k; i++) {
            nk = nk.next;
            if (nk == null) {
                return null;
            }
        }
        ListNode nkPlus = nk.next;
        ListNode prev = null;
        ListNode cur  = n1;

        while (cur != nkPlus) {
            ListNode temp = cur.next;
            cur.next = prev;
            prev = cur;
            cur = temp;
        }
        head.next = nk;
        n1.next = nkPlus;
        return n1;
    }

results matching ""

    No results matching ""