Problem: Given a linked list, write a function to reverse every k nodes.
Solution: Tweak the reverse method to get the desired result.
Implementation:
//Public interface
void List::reverseK(int k)
{
if(!head || k == 0)
return;
head = reverseK(head, k);
}
//Actual Implementation
List::ListNode* List::reverseK(List::ListNode *node, int k)
{
ListNode *curr = node;
ListNode *next = 0, *prev = 0;
int count = 1;
while(curr && count <= k)
{
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
++count;
}
if(next)
node->next = reverseK(next, k);
return prev;
}
Complexity: O(n)
Solution: Tweak the reverse method to get the desired result.
Implementation:
//Public interface
void List::reverseK(int k)
{
if(!head || k == 0)
return;
head = reverseK(head, k);
}
//Actual Implementation
List::ListNode* List::reverseK(List::ListNode *node, int k)
{
ListNode *curr = node;
ListNode *next = 0, *prev = 0;
int count = 1;
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