1

次のコードに問題があります。最初にレコードを検索してから削除する必要があります。

常に最後のレコードを削除します。最初の途中のコードを削除したい場合でも

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;

                                          }
4

2 に答える 2

2

問題はここにあります:

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

削除するノードを見つけるには、ノードのアドレスを比較します。は別のオブジェクトであるためtempRec、リンクリストに表示されることはありません。

代わりにNameForSearch1、を各ノードのデータと比較する必要があります。

また、whileループ条件は、リストの最後を超えて実行できるため、適切に構築されていません。リストの最後に到達していないことを確認する必要があります。

于 2012-12-14T12:53:20.277 に答える
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;     
                                        }
                       }               
于 2012-12-15T00:54:06.507 に答える