Question: Append the last n nodes of a linked list to the beginning of the list
eg: 1->2->3->4->5->6
if n=2
5->6->1->2->3->4
Solution: This is the same approach as the previous problem.Start traversing till you traverse n elements.Start another traverse in same loop after meeting above condition (there will be always gap of n nodes between these to pointers) when first pointer reach to end of linked list second pointer will be n node behind. Just change the pointer .
node *prepend(node * root, int k)
{
node *prev, *curr;
curr = root;
for (int i = 0; i < k; i++) {
curr = curr->next;
if (curr == NULL)
return NULL;
}
prev = root;
while (curr->next != NULL) {
curr = curr->next;
prev = prev->next;
}
curr->next = root;
root = prev->next;
prev->next = NULL;
return root;
}
No comments:
Post a Comment