node* kReverse (node* head, int k) { // base case if (head == NULL) { return NULL; } // step 1: reverse first k nodes node* forward = NULL; node* curr = head; node* prev = NULL; int cnt = 0; while (curr != NULL && cnt < k) { forward = curr -> next; curr -> next = prev; prev = curr; curr = forward; cnt++; } // step 2: recursion if (forward != NULL) { head -> next = kReverse(forward, k); } // step 3: return head of the modified list return prev; }