Please show me the approach to solve the problem

How can I solve this problem?

THis problem can be solved using recursion. Reverse the first sub-list of size k. While reversing keep track of the next node and previous node. Let the pointer to the next node be next and pointer to the previous node be prev .

  • head->next = reverse(next, k) ( Recursively call for rest of the list and link the two sub-lists )
  • Return prev ( prev becomes the new head of the list

Node *reverse (Node *head, int k)

{

Node* current = head;

Node* next = NULL;

Node* prev = NULL;

int count = 0;

/*reverse first k nodes of the linked list */

while (current != NULL && count < k)

{

next = current->next;

current->next = prev;

prev = current;

current = next;

count++;

}

/* next is now a pointer to (k+1)th node

Recursively call for the list starting from current.

And make rest of the list as next of first node */

if (next != NULL)

head->next = reverse(next, k);

/* prev is new head of the input list */

return prev;

}