我遇到以下代码的问题。我需要首先搜索记录然后将其删除:
它总是删除最后一条记录。即使我想删除中间的第一个任何rcord
string NameForSearch1;
cout<<"Enter Your Friend's Name: "<<endl;
cin>>NameForSearch1;
tempRec->namePerson=NameForSearch1;
if (tempRec==firstRec){//delete the head
tempRec->next=firstRec;
firstRec=tempRec->next;
delete tempRec;
DisplayRec();
}
else if (tempRec->next==NULL ){//delete the last record
tempRec2=firstRec->next;
while(tempRec2->next!=tempRec){
tempRec2 = tempRec2->next;
}
tempRec2->next=NULL;
delete tempRec;
}
else {
//delete anyrecord
tempRec2=firstRec->next;
while(tempRec2->next!=tempRec){
tempRec2 = tempRec2->next;
}
tempRec2->next=tempRec->next;
delete tempRec;
}
答案 0 :(得分:2)
问题在于:
tempRec2=firstRec->next;
while(tempRec2->next!=tempRec){
tempRec2 = tempRec2->next;
}
要查找要删除的节点,您要比较节点的地址。由于tempRec
是一个不同的对象,因此您永远不会在链接列表中找到它。
相反,您应该将NameForSearch1
与每个节点中的数据进行比较。
此外,您的while循环条件构造不良,因为它允许您运行超出列表的末尾。您需要确保没有到达列表的末尾。
答案 1 :(得分:0)
经过数小时的调试,我终于能够得到正确的代码:
string NameForSearch1;
cout<<"Enter Your Friend's Name: "<<endl;
cin>>NameForSearch1;
tempRec=firstRec;
if (tempRec->namePerson==NameForSearch1){//delete the head
firstRec=tempRec->next;
delete tempRec;
DisplayRec();
}
else
{
while (tempRec!=NULL && tempRec->namePerson!=NameForSearch1){
tempRec2=tempRec;
tempRec=tempRec->next;
}
if (tempRec==NULL)
{
cout<<"NO RECORD FOUND";
}
else if (tempRec->namePerson==NameForSearch1)
{
tempRec2->next=tempRec->next;
delete tempRec;
}
}