Drawing-2026-04-18-17.59.49.excalidraw
https://leetcode.com/problems/reverse-nodes-in-k-group/

// ── REVERSE K NODES ──────────────────────────────────────────────
// https://leetcode.com/problems/reverse-nodes-in-k-group/description/
// reverseKGroup(k=2)
//
// before: [1]->[2]->[4]->[5]->NULL
//
// chunk1: reverse [1],[2]  →  [2]->[1]
// chunk2: reverse [4],[5]  →  [5]->[4]
// stitch: [2]->[1]->[5]->[4]->NULL
//
// after:  [2]->[1]->[5]->[4]->NULL
//
// LC 25 variant: if remaining nodes < k, leave them as-is
// e.g. [1,2,3,4,5] k=3 → [3,2,1,4,5]  (4,5 untouched since 2 < k)
 
 
class Solution {
public:
    pair<ListNode*, ListNode*> reverseKnodes(ListNode* head, int k) {
        ListNode *prev = NULL, *curr = head;
 
        while (curr && k != 0) {
            auto nex = curr->next;
            curr->next = prev;
            prev = curr;
            curr = nex;
            k--;
        }
        return {prev, curr};
    }
    ListNode* reverseKGroup(ListNode* head, int k) {
 
        if (head == NULL) return head;
        auto tem = head;
        int t = k;
        while (t--) {
            if (!tem) return head;
            tem = tem->next;
        }
 
        auto [last, newHead] = reverseKnodes(head, k);
        head -> next = reverseKGroup(newHead, k);
        return last;
 
    }
};