Удалить зависания в C ++ связанных данных списка Struc

У меня проблема со следующим кодом. Мне нужно сначала найти запись, а затем удалить ее:

Это всегда удаляет последнюю запись. Даже если я хочу удалить первый любой 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;

}

1

Решение

Проблема здесь:

tempRec2=firstRec->next;
while(tempRec2->next!=tempRec){
tempRec2 = tempRec2->next;
}

Чтобы найти удаляемый узел, вы сравниваете адрес узла. поскольку tempRec это другой объект, который вы никогда не найдете в связанном списке.

Вместо этого вы должны сравнивать NameForSearch1 с данными в каждом узле.

Кроме того, ваше условие цикла плохо сконструировано, так как оно позволяет вам пройти за конец списка. Вы должны убедиться, что вы не достигли конца списка.

2

Другие решения

После нескольких часов отладки я наконец смог получить правильный код:

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;
}
}
0

По вопросам рекламы [email protected]