Reverse two adjacent lists in k elements for k times to reverse the k list nodes.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *reverseKGroup(ListNode *head,int k)
{
ListNode *curr=head,*prev,*next=NULL;
int cnt=0;
if(k<=0) return head;
ListNode *p=head;
while(p!=NULL && cnt<k) {
p = p->next;
cnt++;
}
// If there are less than k elements rest, don't reverse
if(cnt<k) return head;
cnt = 0;
while(curr!=NULL && cnt<k)
{
prev=curr;
curr=curr->next;
prev->next=next;
next=prev;
cnt++;
}
if(curr!=NULL)
head->next = reverseKGroup(curr,k);
return prev ;
}
};