Problem: Given a linked list, write a function to reverse every k nodes.
Implementation:
void List::reverseK(int k)
{
if(head)
head = reverseK(head, k);
}
Node* List::reverseK(Node *node, int k)
{
Node *curr = node, *next = 0, *prev = 0;
int count = 0;
while(curr && (count < k))
{
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
++count;
}
if(next)
node->next = reverseK(next, k);
return prev;
}
Implementation:
void List::reverseK(int k)
{
if(head)
head = reverseK(head, k);
}
Node* List::reverseK(Node *node, int k)
{
Node *curr = node, *next = 0, *prev = 0;
int count = 0;
while(curr && (count < k))
{
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
++count;
}
if(next)
node->next = reverseK(next, k);
return prev;
}
No comments:
Post a Comment