#include<stdio.h>
#include<stdlib.h>
typedef struct node* list;
struct node{
int data;
struct node *next;
};
list initlist();
void read(list l);
void print(list l);
void combine(list l1,list l2,list l3);
int main()
{
list l1,l2,l3;
l1=initlist();
l2=initlist();
l3=initlist();
read(l1);
read(l2);
combine(l1,l2,l3);
print(l3);
return 0;
}
list initlist()//初始化建一个空的头结点
{
list l;
l=(list)malloc(sizeof(struct node));
if(!l) return NULL;
l->next=NULL;
return l;
}
void read(list l)
{
list tmp;
int data;
scanf("%d",&data);//输入第一个数据
while(data>0)
{
tmp=(list)malloc(sizeof(struct node));
if(!tmp) return NULL;
tmp->next=NULL;
tmp->data =data;
l->next=tmp;
l=tmp;
scanf("%d",&data);//接着输入下一个数据
}
return;
}
void combine(list l1,list l2,list l3)
{
l1=l1->next;
l2=l2->next;
while(l1!=NULL&l2!=NULL)
{
if(l1->data>l2->data)
{
l3->next=l2;
l2=l2->next;
}
else
{
l3->next=l1;
l1=l1->next;
}
l3=l3->next;
}
if(l1==NULL&&l2==NULL)
return;
if(l1!=NULL)
l3->next=l1;
else
l3->next=l2;
return;
}//一共三种情况,要把分别是否为空链表考虑进去
void print(list l)
{
l=l->next;
if(l==NULL)//考虑是否为空链表
{
printf("NULL");
return;
}
while(l)
{
if(l->next==NULL)
printf("%d",l->data);
else
printf("%d ",l->data);
l=l->next;
}
}