#include<iostream>
#include<malloc.h>
#include<cstdio>
using namespace std;
typedef struct LNode{
int data;
int sum = 0;
struct LNode *next;
}LNode,*List;
void creat_list(List &L){
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
int temp;
LNode *head = L;
while(cin>>temp && temp != -1){
LNode *p = (LNode *)malloc(sizeof(LNode));
p->data = temp;
if(!(L->next)){
p->next = L->next;
L->next = p;
head = p;
}
else{
p->next = head->next;
head->next = p;
head = p;
}
}
}
int merger_list(List &L1,List &L2,List &L3){
L3 = (LNode *)malloc(sizeof(LNode));
L3->next = NULL;
LNode *pa = L1->next;
LNode *pb = L2->next;
LNode *pc = L1;
L3 = pc;
while(pa && pb){
if(pa->data <= pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}
else{
pc->next= pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa : pb;
free(L2);
}
void print_list(List &L){
LNode *p = L->next;
int time = 1;
while(p){
if(time == 1)cout<<p->data;
else cout<<" "<<p->data;
p = p->next;
time++;
}
}
int main(){
List L1,L2,L3;
creat_list(L1);
creat_list(L2);
merger_list(L1,L2,L3);
if(!(L3->next))cout<<"NULL";
else print_list(L3);
}
The time complexity of using this method to merge linked lists is O(n).