#include <iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct node
{
int data;
struct node* next;
};
void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node =
(struct node*) malloc(sizeof(struct node));
/* put in the data */
new_node->data = new_data;
/* link the old list off the new node */
new_node->next = (*head_ref);
/* move the head to point to the new node */
(*head_ref) = new_node;
}
void printList(struct node *node)
{
while(node!=NULL)
{
printf("%d ", node->data);
node = node->next;
}
}
struct node* merge(struct node*a,struct node*b){
struct node* c=NULL;
struct node* temp1=NULL;
while(a||b){
if(a==NULL)
{if(c==NULL)
return b;
else{
temp1->next=b;
break;
}
}
else if(b==NULL)
{if(c==NULL)
return a;
else
temp1->next=a;
break;
}
struct node* temp=(struct node*)malloc(sizeof(struct node));
if(a->data<=b->data){
temp->data=a->data;
temp->next=NULL;
a=a->next;
}
else{
temp->data=b->data;
temp->next=NULL;
b=b->next;
}
if(c==NULL)
{
c=temp;
temp1=c;
}
else{
temp1->next=temp;temp1=temp;
}
}
return c;
}
int main()
{
struct node* a = NULL;
struct node* b = NULL;
struct node* c=NULL;
push(&a, 15);
push(&a, 10);
push(&a, 5);
push(&b, 20);
push(&b, 3);
push(&b, 2);
c= merge(a, b);
printf("\n Merged Linked List is: \n");
printList(c);
getchar();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxzdGRsaWIuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSogbmV4dDsKfTsKdm9pZCBwdXNoKHN0cnVjdCBub2RlKiogaGVhZF9yZWYsIGludCBuZXdfZGF0YSkKewogICAgLyogYWxsb2NhdGUgbm9kZSAqLwogICAgc3RydWN0IG5vZGUqIG5ld19ub2RlID0KICAgICAgICAgICAgKHN0cnVjdCBub2RlKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogCiAgICAvKiBwdXQgaW4gdGhlIGRhdGEgICovCiAgICBuZXdfbm9kZS0+ZGF0YSAgPSBuZXdfZGF0YTsKICAgIAogICAgLyogbGluayB0aGUgb2xkIGxpc3Qgb2ZmIHRoZSBuZXcgbm9kZSAqLwogICAgbmV3X25vZGUtPm5leHQgPSAoKmhlYWRfcmVmKTsKICAgIAogICAgLyogbW92ZSB0aGUgaGVhZCB0byBwb2ludCB0byB0aGUgbmV3IG5vZGUgKi8KICAgICgqaGVhZF9yZWYpICAgID0gbmV3X25vZGU7Cn0KIHZvaWQgcHJpbnRMaXN0KHN0cnVjdCBub2RlICpub2RlKQp7CiAgd2hpbGUobm9kZSE9TlVMTCkKICB7CiAgIHByaW50ZigiJWQgIiwgbm9kZS0+ZGF0YSk7CiAgICAgbm9kZSA9IG5vZGUtPm5leHQ7CiAgfQp9CnN0cnVjdCBub2RlKiBtZXJnZShzdHJ1Y3Qgbm9kZSphLHN0cnVjdCBub2RlKmIpewoJc3RydWN0IG5vZGUqIGM9TlVMTDsKCXN0cnVjdCBub2RlKiB0ZW1wMT1OVUxMOwoJd2hpbGUoYXx8Yil7CgkJaWYoYT09TlVMTCkKCQl7aWYoYz09TlVMTCkKCQlyZXR1cm4gYjsKCQllbHNlewoJCQl0ZW1wMS0+bmV4dD1iOwoJCQlicmVhazsKCQl9CgkKCQl9CgkJZWxzZSBpZihiPT1OVUxMKQoJCXtpZihjPT1OVUxMKQoJCXJldHVybiBhOwoJCWVsc2UKCQl0ZW1wMS0+bmV4dD1hOwoJCWJyZWFrOwoJCX0KCQlzdHJ1Y3Qgbm9kZSogdGVtcD0oc3RydWN0IG5vZGUqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5vZGUpKTsKCQkJaWYoYS0+ZGF0YTw9Yi0+ZGF0YSl7CgkJCQl0ZW1wLT5kYXRhPWEtPmRhdGE7CgkJCQl0ZW1wLT5uZXh0PU5VTEw7CgkJCQlhPWEtPm5leHQ7CgkJCQl9CgkJCQllbHNlewoJCQkJCXRlbXAtPmRhdGE9Yi0+ZGF0YTsKCQkJCQl0ZW1wLT5uZXh0PU5VTEw7CgkJCQkJYj1iLT5uZXh0OwoJCQkJfQoJCQkJaWYoYz09TlVMTCkKCQkJCXsKCQkJCQljPXRlbXA7CgkJCQkJdGVtcDE9YzsKCQkJCX0KCQkJCWVsc2V7CgkJCQkJdGVtcDEtPm5leHQ9dGVtcDt0ZW1wMT10ZW1wOwoJCQkJfQoJfQoJCQkJcmV0dXJuIGM7Cn0KaW50IG1haW4oKQp7CgogIHN0cnVjdCBub2RlKiBhID0gTlVMTDsKICBzdHJ1Y3Qgbm9kZSogYiA9IE5VTEw7ICAKc3RydWN0IG5vZGUqIGM9TlVMTDsgCiAgcHVzaCgmYSwgMTUpOwogIHB1c2goJmEsIDEwKTsKICBwdXNoKCZhLCA1KTsKICAgCiAgcHVzaCgmYiwgMjApOwogIHB1c2goJmIsIDMpOwogIHB1c2goJmIsIDIpOyAgCiAKICBjPSBtZXJnZShhLCBiKTsgCiAKICBwcmludGYoIlxuIE1lcmdlZCBMaW5rZWQgTGlzdCBpczogXG4iKTsKICBwcmludExpc3QoYyk7ICAgICAgICAgICAgCiAKICBnZXRjaGFyKCk7CiAgcmV0dXJuIDA7Cn0=