Given the head
of a linked list, reverse the nodes of the list k
at a time, and return the modified list.
k
is a positive integer and is less than or equal to the length of the linked list. If the number of nodes is not a multiple of k
then left-out nodes, in the end, should remain as it is.
You may not alter the values in the list's nodes, only nodes themselves may be changed.
Example 1:
Input: head = [1,2,3,4,5], k = 2
Output: [2,1,4,3,5]
Example 2:
Input: head = [1,2,3,4,5], k = 3
Output: [3,2,1,4,5]
class Solution {
public:
ListNode* reverseKGroup(ListNode* head, int k) {
ListNode* curr = head;
ListNode* nodenext=NULL;
ListNode* prevnode = NULL;
int count=0;
while(curr!=NULL && count<k){
nodenext = curr->next;
curr->next = prevnode;
prevnode = curr;
curr = nodenext;
count++;
}
if(count!=k){
ListNode* t = prevnode;
prevnode = NULL;
while(t!=NULL){
nodenext = t->next;
t->next = prevnode;
prevnode = t;
t = nodenext;
}
return prevnode;
}
if(nodenext!=NULL){
ListNode* rest_head = reverseKGroup(nodenext , k);
head->next = rest_head;
}
return prevnode;
}
};