#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct LNode)
typedef struct LNode
{ int data;
struct LNode *next;
}LNode, *Linklist;
int creat(Linklist &hd,int n)
{ Linklist pf,pb;int i;
for(i=0;i<n;i++)
{ pb=(Linklist)malloc(LEN);
printf("input data:");
scanf("%d",&pb->data);
if(i==0) pf=hd=pb;
else pf->next=pb;
pb->next=NULL;
pf=pb;
}
return 1;
}
int display(Linklist hd)
{ Linklist ps;
int i=1;ps=hd;printf("\nOupput linklist data:\n");
if(ps==NULL)printf(" The linked list is empty!\n");
while(ps!=NULL)
{ printf("No:%d data=%d\n",i++,ps->data);
ps=ps->next;
}
return i-1;
}
int add(Linklist &hd,int b/*加在第b个后*/,int c/*所加的数*/)
{ Linklist p=hd,n;int i;
n=(Linklist)malloc(LEN);
n->data=c;
if(b==0)
{ n->next=hd;
hd=n;
}
else
{ for(i=0;i<b-1;i++)
p=p->next;
n->next=p->next;p->next=n;
}
return 1;
}
int Union(Linklist L1,Linklist L2,Linklist &L3)
{ int i,j,k;
Linklist p=L1,q=L2;
for(k=1;p->next!=NULL;p=p->next,k++);
L3=L1;
for(q=L2,i=1;q!=NULL;q=q->next,i++)
{ p=L1;
for(j=1;p!=NULL;p=p->next,j++)
if(p->data==q->data)break;
if(p==NULL) add(L3,k++,q->data);
}
return 1;
}
void main()
{ Linklist L1,L2,L3;
int n;
printf("请输入链表L1的节点数:");
scanf("%d",&n);fflush(stdin);
creat(L1,n);
display(L1);
printf("请输入链表L2的节点数:");
scanf("%d",&n);fflush(stdin);
creat(L2,n);
display(L2);
Union(L1,L2,L3);
printf("L1与L2的并集L3为:");
display(L3);
}