#include<iostream>
using namespace std;
struct node{
int data;
node *next;
};
int count=0;
void insert_tail(node **pointerToStart,node **pointerToTail,int n){
node *temp=new node;
temp->data=n;
if(*pointerToStart==NULL){
(*temp).next=*pointerToStart;
*pointerToStart=temp;
*pointerToTail=temp;
count++;
}
else{
(*pointerToTail)->next=temp;
temp->next=NULL;
*pointerToTail=temp;
count++;
}
}
void print_list(node* start){
node* temp=start;
while(temp!=NULL){
cout<<temp->data<<"->";
temp=temp->next;
}
cout<<"NULL";
}
node *reverse(node **pointerToNode){
node* head;
if((*pointerToNode)->next==NULL){
head=*pointerToNode;
return head;
}
node *q=(*pointerToNode)->next;
node *p=*pointerToNode;
head=reverse(&q);
node *temp=p->next;
temp->next=p;
p->next=NULL;
return head;
}
node* merge(node* start1,node* start2){
if(start1==NULL){
return start2;
}
if(start2==NULL){
return start1;
}
if(start1->data<start2->data){
start1->next=merge(start1->next,start2);
return start1;
}
else{
start2->next=merge(start1,start2->next);
return start2;
}
}
main(){
node *start=NULL, *tail=NULL,*start1=NULL,*start2=NULL,*tail1=NULL,*tail2=NULL;
for(int i=1;i<=1;i++){
insert_tail(&start1,&tail1,i);
}
print_list(start1);
cout<<"\n";
for(int i=2;i<=2;i++){
insert_tail(&start2,&tail2,i);
}
print_list(start2);
cout<<"\n";
start=merge(start1,start2);
print_list(start);
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBub2RlewoJaW50IGRhdGE7Cglub2RlICpuZXh0Owp9OwppbnQgY291bnQ9MDsKdm9pZCBpbnNlcnRfdGFpbChub2RlICoqcG9pbnRlclRvU3RhcnQsbm9kZSAqKnBvaW50ZXJUb1RhaWwsaW50IG4pewoJCW5vZGUgKnRlbXA9bmV3IG5vZGU7CgkJdGVtcC0+ZGF0YT1uOwoJCWlmKCpwb2ludGVyVG9TdGFydD09TlVMTCl7CgkJCSgqdGVtcCkubmV4dD0qcG9pbnRlclRvU3RhcnQ7CgkJCSpwb2ludGVyVG9TdGFydD10ZW1wOwoJCQkqcG9pbnRlclRvVGFpbD10ZW1wOwoJCQljb3VudCsrOwoJCX0KCQllbHNlewoJCQkoKnBvaW50ZXJUb1RhaWwpLT5uZXh0PXRlbXA7CgkJCXRlbXAtPm5leHQ9TlVMTDsKCQkJKnBvaW50ZXJUb1RhaWw9dGVtcDsKCQkJY291bnQrKzsKCQl9CgkJCn0KCnZvaWQgcHJpbnRfbGlzdChub2RlKiBzdGFydCl7Cglub2RlKiB0ZW1wPXN0YXJ0OwoJd2hpbGUodGVtcCE9TlVMTCl7CgkJY291dDw8dGVtcC0+ZGF0YTw8Ii0+IjsKCQl0ZW1wPXRlbXAtPm5leHQ7Cgl9Cgljb3V0PDwiTlVMTCI7Cn0Kbm9kZSAqcmV2ZXJzZShub2RlICoqcG9pbnRlclRvTm9kZSl7CgkJbm9kZSogaGVhZDsKCQkKCWlmKCgqcG9pbnRlclRvTm9kZSktPm5leHQ9PU5VTEwpewoJCSBoZWFkPSpwb2ludGVyVG9Ob2RlOwoJCXJldHVybiBoZWFkOwoJfQoJbm9kZSAqcT0oKnBvaW50ZXJUb05vZGUpLT5uZXh0OwoJbm9kZSAqcD0qcG9pbnRlclRvTm9kZTsKCWhlYWQ9cmV2ZXJzZSgmcSk7Cglub2RlICp0ZW1wPXAtPm5leHQ7Cgl0ZW1wLT5uZXh0PXA7CglwLT5uZXh0PU5VTEw7CglyZXR1cm4gaGVhZDsKfQpub2RlKiBtZXJnZShub2RlKiBzdGFydDEsbm9kZSogc3RhcnQyKXsKCQoJaWYoc3RhcnQxPT1OVUxMKXsKCQlyZXR1cm4gc3RhcnQyOwoJfQoJaWYoc3RhcnQyPT1OVUxMKXsKCQlyZXR1cm4gc3RhcnQxOwoJfQoJCglpZihzdGFydDEtPmRhdGE8c3RhcnQyLT5kYXRhKXsKCQlzdGFydDEtPm5leHQ9bWVyZ2Uoc3RhcnQxLT5uZXh0LHN0YXJ0Mik7CgkJcmV0dXJuIHN0YXJ0MTsKCX0KCWVsc2V7CgkJc3RhcnQyLT5uZXh0PW1lcmdlKHN0YXJ0MSxzdGFydDItPm5leHQpOwoJCXJldHVybiBzdGFydDI7Cgl9CgkKfQkKCm1haW4oKXsKCW5vZGUgKnN0YXJ0PU5VTEwsICp0YWlsPU5VTEwsKnN0YXJ0MT1OVUxMLCpzdGFydDI9TlVMTCwqdGFpbDE9TlVMTCwqdGFpbDI9TlVMTDsKCWZvcihpbnQgaT0xO2k8PTE7aSsrKXsKCQlpbnNlcnRfdGFpbCgmc3RhcnQxLCZ0YWlsMSxpKTsKCX0KCXByaW50X2xpc3Qoc3RhcnQxKTsKCQoJCWNvdXQ8PCJcbiI7Cglmb3IoaW50IGk9MjtpPD0yO2krKyl7CgkJaW5zZXJ0X3RhaWwoJnN0YXJ0MiwmdGFpbDIsaSk7Cgl9CglwcmludF9saXN0KHN0YXJ0Mik7Cgljb3V0PDwiXG4iOwoJc3RhcnQ9bWVyZ2Uoc3RhcnQxLHN0YXJ0Mik7CQoJcHJpbnRfbGlzdChzdGFydCk7CgkKfQ==