#include <stdio.h>
// Given two sorted linked lists and merge them in sorted order.
struct Node
{
int data;
struct Node *next;
};
void printList(struct Node *head)
{
struct Node *curr = head;
while (curr != NULL)
{
curr = curr->next;
}
}
struct Node *mergeSortedNodes(struct Node *first,
struct Node *second)
{
if (first == NULL)
{
return second;
}
else if (second == NULL)
{
return first;
}
struct Node *top;
struct Node *curr;
if (first->data < second->data)
{
top = curr = first;
first = first->next;
}
else
{
top = curr = second;
second = second->next;
}
while (first != NULL && second != NULL)
{
if (first->data < second->data)
{
curr->next = first;
first = first->next;
}
else
{
curr->next = second;
second = second->next;
}
curr = curr->next;
}
if (first != NULL)
{
while (first != NULL)
{
curr->next = first;
first = first->next;
curr = curr->next;
}
}
if (second != NULL)
{
while (second != NULL)
{
curr->next = second;
second = second->next;
curr = curr->next;
}
}
return top;
}
struct Node *newNode(int data)
{
struct Node
*tmp
= (struct Node
*)malloc(sizeof(struct Node
)); tmp->data = data;
tmp->next = NULL;
return tmp;
}
int main()
{
struct Node *first = newNode(10);
first->next = newNode(20);
first->next->next = newNode(30);
first->next->next->next = newNode(40);
first->next->next->next->next = newNode(50);
struct Node *second = newNode(5);
second->next = newNode(8);
second->next->next = newNode(13);
second->next->next->next = newNode(37);
printList(first);
printList(second);
struct Node *mergeNode = mergeSortedNodes(first, second);
printList(mergeNode);
printList(first);
printList(second);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBHaXZlbiB0d28gc29ydGVkIGxpbmtlZCBsaXN0cyBhbmQgbWVyZ2UgdGhlbSBpbiBzb3J0ZWQgb3JkZXIuCnN0cnVjdCBOb2RlCnsKICAgIGludCBkYXRhOwogICAgc3RydWN0IE5vZGUgKm5leHQ7Cn07Cgp2b2lkIHByaW50TGlzdChzdHJ1Y3QgTm9kZSAqaGVhZCkKewogICAgc3RydWN0IE5vZGUgKmN1cnIgPSBoZWFkOwogICAgd2hpbGUgKGN1cnIgIT0gTlVMTCkKICAgIHsKICAgICAgICBwcmludGYoIiVkICIsIGN1cnItPmRhdGEpOwogICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgfQogICAgcHJpbnRmKCJcbiIpOwp9CnN0cnVjdCBOb2RlICptZXJnZVNvcnRlZE5vZGVzKHN0cnVjdCBOb2RlICpmaXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IE5vZGUgKnNlY29uZCkKewogICAgaWYgKGZpcnN0ID09IE5VTEwpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlY29uZDsKICAgIH0KICAgIGVsc2UgaWYgKHNlY29uZCA9PSBOVUxMKQogICAgewogICAgICAgIHJldHVybiBmaXJzdDsKICAgIH0KICAgIHN0cnVjdCBOb2RlICp0b3A7CiAgICBzdHJ1Y3QgTm9kZSAqY3VycjsKICAgIGlmIChmaXJzdC0+ZGF0YSA8IHNlY29uZC0+ZGF0YSkKICAgIHsKICAgICAgICB0b3AgPSBjdXJyID0gZmlyc3Q7CiAgICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICB0b3AgPSBjdXJyID0gc2Vjb25kOwogICAgICAgIHNlY29uZCA9IHNlY29uZC0+bmV4dDsKICAgIH0KICAgIHdoaWxlIChmaXJzdCAhPSBOVUxMICYmIHNlY29uZCAhPSBOVUxMKQogICAgewogICAgICAgIGlmIChmaXJzdC0+ZGF0YSA8IHNlY29uZC0+ZGF0YSkKICAgICAgICB7CiAgICAgICAgICAgIGN1cnItPm5leHQgPSBmaXJzdDsKICAgICAgICAgICAgZmlyc3QgPSBmaXJzdC0+bmV4dDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgY3Vyci0+bmV4dCA9IHNlY29uZDsKICAgICAgICAgICAgc2Vjb25kID0gc2Vjb25kLT5uZXh0OwogICAgICAgIH0KICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgIH0KICAgIGlmIChmaXJzdCAhPSBOVUxMKQogICAgewogICAgICAgIHdoaWxlIChmaXJzdCAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgY3Vyci0+bmV4dCA9IGZpcnN0OwogICAgICAgICAgICBmaXJzdCA9IGZpcnN0LT5uZXh0OwogICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgICAgICB9CiAgICB9CiAgICBpZiAoc2Vjb25kICE9IE5VTEwpCiAgICB7CiAgICAgICAgd2hpbGUgKHNlY29uZCAhPSBOVUxMKQogICAgICAgIHsKICAgICAgICAgICAgY3Vyci0+bmV4dCA9IHNlY29uZDsKICAgICAgICAgICAgc2Vjb25kID0gc2Vjb25kLT5uZXh0OwogICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9wOwp9CnN0cnVjdCBOb2RlICpuZXdOb2RlKGludCBkYXRhKQp7CiAgICBzdHJ1Y3QgTm9kZSAqdG1wID0gKHN0cnVjdCBOb2RlICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgTm9kZSkpOwogICAgdG1wLT5kYXRhID0gZGF0YTsKICAgIHRtcC0+bmV4dCA9IE5VTEw7CiAgICByZXR1cm4gdG1wOwp9CmludCBtYWluKCkKewogICAgc3RydWN0IE5vZGUgKmZpcnN0ID0gbmV3Tm9kZSgxMCk7CiAgICBmaXJzdC0+bmV4dCA9IG5ld05vZGUoMjApOwogICAgZmlyc3QtPm5leHQtPm5leHQgPSBuZXdOb2RlKDMwKTsKICAgIGZpcnN0LT5uZXh0LT5uZXh0LT5uZXh0ID0gbmV3Tm9kZSg0MCk7CiAgICBmaXJzdC0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dCA9IG5ld05vZGUoNTApOwoKICAgIHN0cnVjdCBOb2RlICpzZWNvbmQgPSBuZXdOb2RlKDUpOwogICAgc2Vjb25kLT5uZXh0ID0gbmV3Tm9kZSg4KTsKICAgIHNlY29uZC0+bmV4dC0+bmV4dCA9IG5ld05vZGUoMTMpOwogICAgc2Vjb25kLT5uZXh0LT5uZXh0LT5uZXh0ID0gbmV3Tm9kZSgzNyk7CgogICAgcHJpbnRMaXN0KGZpcnN0KTsKICAgIHByaW50TGlzdChzZWNvbmQpOwogICAgc3RydWN0IE5vZGUgKm1lcmdlTm9kZSA9IG1lcmdlU29ydGVkTm9kZXMoZmlyc3QsIHNlY29uZCk7CiAgICBwcmludExpc3QobWVyZ2VOb2RlKTsKICAgIHByaW50TGlzdChmaXJzdCk7CiAgICBwcmludExpc3Qoc2Vjb25kKTsKfQ==