C/C++ code//求并集的函数:
void bingji(mylist*p,mylist*q,mylist*&r)//r作为并集列表的头指针,p,q是输入的两个指针
{
mylist *k,*m;
r=new mylist;
m=r;
for(;p;)//把一个集合的值复制到
{
m->data=p->data;
k=new mylist;
m->next=k;
p=p->next;
m=m->next;
}
//下面要把q中有的且r中没有的元素添加到r中
for(;q;)
{
m->data=q->data;
k=new mylist;
m->next=k;
q=q->next;
m=m->next;
}
delete k;
m->next=NULL;
}
//求交集的函数:
void jiaoji(mylist*p,mylist*q,mylist*&r)//这样做的话会虽然能求出正确的交集,但是会导致破坏原链表
{
mylist *m,*n,*k;
mylist *temp;//用于存放前一个节点的地址
r=new mylist;
m=r;
n=q;
int i=-1;
for(;p;)
{
for(;q&&-1==i;)
{
if(p->data==q->data)
{
k=new mylist;
m->data=p->data;
m->next=k;
m=m->next;
i=0;
if(q==n)
{
q=q->next;
n=q;
}
else
{
temp->next=q->next;
q=q->next;
}
}
else
{
temp=q;
q=q->next;
}
}
i=-1;
p=p->next;
q=n;
}
delete k;
m->next=NULL;
}