链表构造,输出结果不理想

问题遇到的现象和发生背景 重复输出,不知道是不是链表构造的问题,还是动态内存分配不行,检查不出来
用代码块功能插入代码,请勿粘贴截图 class qq

{
private:
qq *first ,next;
data duck;
int size;
public:
qq(){
first=NULL;
next=first;
size=0;
}
~qq(){
qq
p;
p=first;
while(first){
p=p->next;
delete first;
first=p;
}
}
void print();
void add(data x);
void delet(string name);
void search(string name);
};
void qq::add(data x)
{
qq *p,*s;
p=first;
if(!p){
first=new qq();
first->duck=x;
first->next=NULL;
size++;
}else{
while(p->next){
p=p->next;
}
s=new qq();
s->duck=x;
p->next=s;
s->next=NULL;
size++;
}
}
void qq::delet(string name)
{
if((first->duck).getname()==name){
qq *p=first;
first=first->next;
delete p;
}
else{
qq *s,*r;
s=first->next;
r=first;
while(1){
if((s->duck).getname()==name||s==NULL)
break;
s=s->next;
r=r->next;
}
}
}
void qq::search(string name){
qq *p=first;
while(p)
{
if((p->duck).getname()==name)
{
cout<<(p->duck).getbrithday()<<" "<<(p->duck).getid()<<" ";
}
p=p->next;
}
}
void qq::print()
{
qq *p=first;
while(p)
{
cout<<(p->duck).getname()<<(p->duck).getbrithday()<<(p->duck).getid()<
p=p->next;
}
}
void menu()
{
cout<<"1.添加新的好友"<
cout<<"2. 删除好友"<
cout<<"3. 查找好友"<
cout<<"4. 按顺序展示好友"<
cout<<"5. 查找聊天记录"<
cout<<"6. 退出该系统"<
}
int main()
{
string a ,b;
cin>>b;
data m("Rose" , "32233" , "1998/10/10");
data n("Amy","274932","2004/11/01");
data s("Lucky","324874329","2003/11/01");
qq line;
line.add(m);
line.add(n);
line.add(s);
line.print();
return 0;
}

求解答