用c语言链表实现集合并集时的问题
想用链表求两个集合的并集,交集,差集,但是写并集的时候就出现了问题。我往大神指点,下面贴上代码#include<stdio.h>
#include<stdlib.h>
struct LNode
{
int data;
LNode *next;
};
typedef LNode *LinkList;
void CreateLinkList(LinkList &L,int n)
{ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表
int i;
LinkList p,q;
L=(LinkList)malloc(sizeof(LNode)); // 生成头结点
L->next=NULL;
q=L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
int LocateElem_L(LinkList &L,int e) //查找元素e是否在集合中
{
LinkList p;
p=L->next;
while(p->next)
{
if(e==p->data)
return 1;
else p=p->next;
}
return 0;
}
void ListInsert(LinkList &L,int e)
{
LinkList pa,p;
for(pa=L->next;pa->next;pa=pa->next);
p=(LinkList)malloc(sizeof(LNode));
p->data=e;
p->next=pa->next;
if(pa==NULL) pa=p;
else pa->next=p;
}
void Union(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList p,q;
for(p=La->next;p;p=p->next)
Lc->next->data=p->data;
for(q=Lb->next;q!=NULL;q=q->next)
if(LocateElem_L(La,q->data)==0)
ListInsert(Lc,q->data);
}
void PrintLinkList_L(LinkList L)
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void main()
{
LinkList La,Lb,Lc;
CreateLinkList(La,3);
// ListInsert(La,6);
// PrintLinkList_L(La);
CreateLinkList(Lb,3);
Union(La,Lb,Lc);
PrintLinkList_L(Lc);
}