나는 대통령 이름과 나이의 연결된 목록을 만드는 프로그램을 작성했습니다. 성공적으로 목록을 작성하고 모든 내용이 제대로 작동하는지 확인하고 인쇄했습니다. 나는 지금 목록을 횡단하고 불완전한 데이터를 삭제하고 싶었다.C++ 특정 노드에 대한 링크 된 목록 통과 및 삭제 후에이 인쇄 기능이 작동하지 않는 이유는 무엇입니까?
내 관심사는 삭제 한 후입니다. 인쇄 기능은 "문자열을 읽는 중 오류가 발생했습니다"라는 오류 메시지를 표시합니다. 따라서 목록의 머리 부분이 끝났음을 의미 할 수 있으므로 목록의 범위를 넘어서 인쇄 할 수 있습니다. 내 다른 우려는 아마 내가 노드를 삭제하고 목록을 제대로 다시 연결하지 않았다는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 누군가가 이미 만들어진 링크 된 목록을 탐색하고, 노드를 삭제하고, 새 목록을 링크하도록 의사 코드 논리를 명확히 할 수 있습니까?
// 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]가 포함되도록 게시물을 수정하십시오. 그 pastebin 링크가 당신의 질문을 썩히고 대답하면 쓸모 없게 될 것입니다. – user4581301
나는 편집을했다. – Nathan
그들을 읽으십시오. 너무 많은 코드와 많은 버그. 현재 당신을 슬픔의 원인으로 여기는 것에 좁혀 야합니다. – user4581301