私は大統領の名前と年齢のリンクされたリストを作るプログラムを書いた。私はリストを作成してそれを印刷して、すべてが正常に機能しているかどうかを確認しました。私は今リストをトラバースし、不完全なデータを削除したいと思っていました。C++なぜこのプリント機能は、特定のノードのリンクリストのトラバーサルと削除後に機能しないのですか?
私の主な関心事は、削除が行われた後、print関数は "文字列の読み込みエラー"というエラーを出します。これは、リストの先頭が今終わっていることを意味し、したがってリストの範囲を超えて印刷している可能性があります。私の他の懸念は、おそらく私はノードを削除してリストを適切に再リンクしていないということです。これを行うより良い方法はありますか? 既に作成されたリンクリストをトラバースし、ノードを削除し、新しいリストをリンクさせるための擬似コードロジックを明確にすることはできますか?
President::President()
{
Presidentnode* head = NULL;
}
Presidentnode* head = NULL;
で
// void president cleaning up linked list removes incomplete entries and
void President::RemovingIncompleteEntries()
{
// make a node called delete
Presidentnode * deletenode;
Presidentnode * current = head;
Presidentnode * previous = current;
// while the current has a value
while (current->next != NULL)
{
string CurrentTotal = current->LastName + " " + current->FirstName + " " + current->age;
string CurrentNextTotal = current->next->LastName + " " + current->next->FirstName + " " + current->next->age;
if (CurrentTotal == CurrentNextTotal)
{
cout << "[[" << current->FirstName << " " << current->LastName << "] was deleted for being a duplicate]" << endl;
// sets deletenode to current (will be deleted)
deletenode = current;
// traverses the next node
current = current->next;
// sets the previous nexts pointer at the next current
previous->next = current->next;
// deletes the deletenode;
delete (deletenode);
}
else if ((current->FirstName == current->LastName) || (current->FirstName == current->age))
{
// checks to see if any parts of the name equal another part of the name(helps deal with case like 52)
cout << "[[" << current->FirstName << " " << current->LastName << "] was deleted for having two names equal to each other]" << endl;
// sets deletenode to current (will be deleted)
deletenode = current;
// traverses the next node
current = current->next;
// sets the previous nexts pointer at the next current
previous->next = current->next;
// deletes the deletenode;
delete (deletenode);
}
else if (!(current->age.find_first_not_of("1234567890")))
{
// checks to see if it finds a letter instead of a number (helps deal with Lucas Aubrey)
cout << "[[" << current->FirstName << " " << current->LastName << "] was deleted for having a missing age]" << endl;
// sets deletenode to current (will be deleted)
deletenode = current;
// traverses the next node
current = current->next;
// sets the previous nexts pointer at the next current
previous->next = current->next;
// deletes the deletenode;
delete (deletenode);
}
else{
// traverse the list
current = current->next;
}
previous = current;
}
// show we updated the list
cout << "[Updated List: Incomplete Entries and Duplicates Removed]" << endl;
}
// void printlinkedlist printes presidents in order
void President::PrintLinkedList()
{
Presidentnode *current = head;
// while the head has a value
while (current != NULL){
// prints data
cout << current->FirstName << " " << current->LastName << " " << current->age << endl;
current = current->next;
}
// show we deleted the list
cout << "[List Printed]" << endl;
}
投稿を編集して[mcve]を追加してください。そのペーストビンのリンクがあなたの質問を暴くと、答えは役に立たなくなるでしょう。 – user4581301
私は編集しました。 – Nathan
それらを読む。多すぎるコードと多くのバグ。現在あなたの悲しみを引き起こしているものに絞るのは難しいです。 – user4581301