include <stdio.h>

include <stdlib.h>

typedef struct LNode
{

int data;
LNode *next;

} LNode,*LinkList;
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{

LNode *pa;LNode *pb;LNode *pc;
pa=La->next;pb=Lb->next;
Lc=La;
pc=Lc;
while (pa&&pb)
{
    if(pa->data<pb->data)
    {
        pc->next=pa;
        pc=pa;
        pa=pa->next;
    }
    else if(pa->data>pb->data)
    {
        pc->next=pb;
        pc=pb;
        pb=pb->next;
    }
    else
    {
        pc->next=pa;
        pc=pa;
        pa=pa->next;
        pb=pb->next;
    }
}
pc->next=pa?pa:pb;
delete Lb;

pc->next=pa?pa:pb; //插入剩余段

 delete Lb;            //释放Lb的头结点

}
int main(void)
{

struct LNode* head1=(struct LNode*)malloc(sizeof(struct LNode*));
head1->next=NULL;
struct LNode* p;
p=head1;
int n;
printf("输入第一个连表的长度\n"); 
scanf("%d",&n);
printf("输入相应长度的值\n");
for(int i=0;i<n;i++)
{
   struct LNode* s=(struct LNode*)malloc(sizeof(struct LNode*));
   scanf("%d",&s->data);
   p->next=s;
   s->next=NULL;
   p=s;
}
struct LNode* head2=(struct LNode*)malloc(sizeof(struct LNode*));
head2->next=NULL;
struct LNode* w;
w=head2;
int m;
printf("输入第二个连表的长度\n"); 
scanf("%d",&m);
printf("输入相应长度的值\n");
for(int j=0;j<m;j++)
{
   struct LNode* q=(struct LNode*)malloc(sizeof(struct LNode*));
   scanf("%d",&q->data);
   w->next=q;
   q->next=NULL;
   w=q;
}
struct LNode* head3=(struct LNode*)malloc(sizeof(struct LNode*));
head3->next=NULL;
MergeList(head1,head2,head3);
p=head3;
printf("输出结果");
while (p->next != NULL)//如果p的下一个结点不为NULL,也就是说如果p结点后还有节点存在,那就输出p后面结点中保存的数据。
{
printf("%d\n", p->next->data);
p = p->next;//p结点后移
}
return 0;

}