AJ
BAN USERHere is a working code which I wrote for a general value 'k' indicating every k nodes to be reversed.
eg 1->2->3->4->5->6->7->8->9->10->11 [k=3]
answer must be [3->2->1->6->5->4->9->8->7->11->10]
For this problem put k = 2;
void ReverseK(Node** headRef, int k)
{
Node *ptr = *headRef;
Node *next_ptr = ptr->next;
Node *prev_ptr = NULL;
Node *subarray_head = *headRef;
Node *prevsubarray_tail = NULL;
int count = k;
bool isHeadReset = false;
while (subarray_head)
{
while (count-- && ptr)
{
next_ptr = ptr->next;
ptr->next = prev_ptr;
prev_ptr = ptr;
ptr = next_ptr;
}
if (!isHeadReset)
{
*headRef = prev_ptr;
isHeadReset = true;
}
else
{
prevsubarray_tail->next = prev_ptr;
}
prevsubarray_tail = subarray_head;
subarray_head = ptr;
prev_ptr = NULL;
count = k;
}
}
check my implementation here
- AJ November 19, 2012