Merge Two Sorted Lists

Procedure to merge two sorted linked lists.
void merge(struct node *first, struct node *second) {
​
// A pointer to keep track of last node of merged list
struct node *last;
// First node of merged list
if (first -> data < second -> data) {
// Set head and tail of merged list
third = last = first;
// Move forward in first list
first = first -> next;
} else {
// Set head and tail of merged list
third = last = second;
// Move forward in second list
second = second -> next;
}
third -> next = NULL;
// Remaining node of merged list
while (first && second) {
if(first -> data < second -> data) {
// Next node will be first's node
last -> next = first;
// Update the last pointer
last = first;
first = first -> next;
} else {
// Next node will be second's node
last -> next = second;
// Update the last pointer
last = second;
second = second -> next;
}
}
// Merging remaining elements of first list (if any)
if (first) {
last -> next = first;
}
// Merging remaining elements of second list (if any)
if (second) {
last -> next = second;
}
​
}
Contributed by Nitin Ranganath