这是我写的集合类的源代码,无错误和警告
但是在计算并集时得不到正确的结果
请高手指出错误所在并告诉我正确的写法~~#include<iostream.h>
#include<stdlib.h>
#include<io.h>
class typenode
{public:
int data;
typenode *next;
};//元素类class slist
{public:
typenode *creat()
{int d=1;
typenode *h=NULL,*s,*t,*w;int i=1;cout<<"zz开始建立一个集合"<<endl;;
while(1)
{cout<<"输入第"<<i<<"个元素,此元素不能为0\n";
loop1:
cin>>d;
/*if(isxdigit(d)==false)
{cout<<"输入元素需为整形数,请重新输入:";
goto loop1;}*/
if(d==0)
break;
if(i==1)
{pa=new typenode;
h=pa;
h->data=d;h->next=NULL;t=h;}
else
{w=h;
int y=1;
for(int x=0;x<i-1;x++)
{if(d-w->data==0)
{cout<<"元素不能重复,请重新输入:";
goto loop1;}
else
w=w->next;}

{s=new typenode;
s->data=d;s->next=NULL;t->next=s;
t=s;}//指向尾节点
}
i++;
}
return h;}//创建集合,返回头节点地址
slist():pa(NULL){}friend void display(slist& s)
{typenode *p;
p=s.pa;
cout<<"输出集合元素\n";
if(p==NULL)
cout<<"集合为空\n";
while(p!=NULL)
{cout<<p->data<<"  ";
p=p->next;
}
cout<<endl;
}//输出集合元素
friend int len(slist& h)
{int i=0;
typenode *p=h.pa;
while(p!=NULL)
{p=p->next ;i++;
}
return i;
}//求集合长度
typenode *find(slist& h ,int i)
{typenode *p=h.pa;
int j=1;
if(i>len(h)||i<=0)
return NULL;
else
{while(p!=NULL&&j<i)
{j++;p=p->next ;}
}
return p;
}//找寻元素,返回指针
int find(int i,slist& s)
{
typenode *p=s.pa;
int j=1;
if(i>len(s)||i<=0)
return NULL;
else
{while(p!=NULL&&j<i)
{j++;p=p->next ;}
}
cout<<"找到"<<j<<"元素"<<"为"<<p->data<<endl;
return 1;
}//找寻元素,返回元素本身typenode *insert(slist& h,int i,int x)
{
typenode *p,*s;
s=new typenode;
s->data =x;s->next =NULL;
if(i==0)
{s->next=h.pa;h.pa=s;}
else
{p=find(h,i);
 if(p!=NULL)
 {
 s->next=p->next;p->next=s;
 }
 else
 cout<<"输入位置不正确"<<endl;
}
return p;
}//插入元素,返回指针typenode *del(slist& h,int i)
{typenode *p=h.pa,*s;
int j=1;
if(i==1)
{h.pa=h.pa->next ;delete(p);
}
else
{p=find(h,i-1);
if(p!=NULL&&p->next!=NULL)
{s=p->next;
p->next=s->next;
delete(s);
}
else
cout<<"输入位置不正确"<<endl;
}
return p;
}
typenode destory(slist& s)
{typenode *pa=s.pa,*pb;
if(pa!=NULL)
{pb=pa->next;
if(pb==NULL)
delete(pa);
else
{while(pa!=NULL)
{delete(pa);pa=pb;pb=pb->next;
}
delete(pa);
}
}
}//删除元素
protected:
friend slist operator +(slist& a,slist& b)
{cout<<"并集"<<endl;
slist newlist;
typenode *p,*q,*w,*s;
newlist.pa=new typenode;
w=newlist.pa;
if(len(a)>len(b)&&len(a)==len(b))
{p=a.pa;q=b.pa;}
else
{p=b.pa;q=a.pa;}
bool n=false;
if(a.pa==NULL&&b.pa==NULL)
{cout<<"两个集合都是空的!"<<endl;
}
while(p!=NULL)
{  s=new typenode;
 s->data=p->data;
     s->next=NULL;
 w->next=s;
 w=s;
 p=p->next;
}w=newlist.pa;
newlist.pa=newlist.pa->next;
delete(w);
w=newlist.pa;while(q!=NULL){
 while(w->next!=NULL)
{if(w->data-q->data==0)
 {n=true;
 w=w->next;}
else
w=w->next;
}
 if(n==false)
 {s=new typenode;
s->data=q->data;
w->next=s;
s->next=NULL;
w=s;
}
w=newlist.pa;
q=q->next;
}
return newlist;}
friend slist operator *(slist& a,slist& b)
{cout<<"交集"<<endl;
bool n=false;
  typenode *p,*q,*s,*r;
  p=a.pa;
  q=b.pa;
  slist newlist;
  newlist.pa=new typenode;
  r=newlist.pa;
  while(q!=NULL){
  while(p!=NULL){
  if(p->data==q->data){
              s=new typenode;
              s->data=q->data;
  r->next=s;
  r=s;
  s->next=NULL;
  p=p->next;
  n=true;
  }
  else
  p=p->next;
  }
  
   p=a.pa;
   q=q->next;
  }
  if(n==false)                                    
  {
  cout<<"没有相同元素!"<<endl;
  newlist.pa->next=NULL;
  newlist.pa->data=0;
      return newlist;
  }
   
  else
{
     r=newlist.pa;
     newlist.pa=newlist.pa->next;
     delete(r);
     return newlist;
  }
return newlist;
}
private:
typenode *pa;//头节点

};//集合类
void main()
{slist hahaha;
hahaha.creat();
display (hahaha );
hahaha.find (6,hahaha);
slist hehehe;
hehehe.creat();
display (hehehe);
slist newlist;
newlist=hahaha+hehehe;
display (newlist);
slist newlist2;
newlist2=hahaha*hehehe;
display(newlist2);
}