将两个递增的有序链表合并为一个递增的有序链表,表中不允许有重复数据且不另占用其他储存空间。
结果截图:
源代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define OK 1
typedef int ElemType;
typedef int Status;
//定义线性表
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
// 初始化
Status InitList (LinkList &L)
{
L=new LNode;
L->next=NULL;
return OK;
}
LinkList pa,pb,pc;
LinkList La,Lb,Lc;
//合并链表
void MergeList_L(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;
InitList(La);
InitList(Lb);
printf("输入La的长度并赋值:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
pa=new LNode;
scanf("%d",&pa->data);
pa->next=La->next;
La->next=pa;
}
pa=La->next;
while(pa)
{
printf("%2d",pa->data);
pa=pa->next;
}
printf("\n");
printf("请输入Lb的长度并赋值:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
pb=new LNode;
scanf("%d",&pb->data);
pb->next=Lb->next;
Lb->next=pb;
}
pb=Lb->next;
while(pb)
{
printf("%2d",pb->data);
pb=pb->next;
}
printf("\n");
MergeList_L(La,Lb,Lc);
pc=La->next;
printf("合并后的链表为\n");
while(pc)
{
printf("%2d",pc->data);
pc=pc->next;
}
printf("\n");
}