由于上次的太复杂,简化版本。输入的时候由于是前插法,要倒着输入。
运行结果:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OK 1
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode ,*LinkList;
LinkList pa,pb,pc,t;
LinkList La,Lb,Lc;
int IintList (LinkList &L)
{
L = new LNode;
L->next=NULL;
return OK;
}
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{
pa=La->next;
pb=Lb->next;
pc = Lc =La;
while(pa && pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
if(pa->data == pb->data)
pb = pb->next;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next =pa?pa:pb;
delete Lb;
}
int main()
{
int i,n;
IintList (La);
IintList (Lb);
printf("输入La表的长度n:");
scanf("%d", &n);
printf("向la顺序表赋值:");
for(i = 0;i < n; i++)
{
pa = new LNode;
scanf("%d",&pa->data);
pa->next = La->next;
La->next = pa;
}
printf("La的数据为:");
pa = La->next;
while (pa)
{
printf("%5d",pa->data);
pa = pa->next;
}
printf("\n输入Lb表的长度n:");
scanf("%d", &n);
printf("向Lb顺序表赋值:");
for(i = 0;i <n; i++)
{
pb = new LNode;
scanf("%d",&pb->data);
pb->next = Lb->next;
Lb->next = pb;
}
printf("Lb的数据为:");
pb = Lb->next;
while (pb)
{
printf("%5d",pb->data);
pb = pb->next;
}
printf("\n");
MergeList(La,Lb,Lc);
t = La->next;
printf("合并后链表为:");
while(t)
{
printf("%5d",t->data);
t = t->next;
}
printf("\n");
}