問題: ノードを削除する際に問題に直面しています。最初に挿入する方法を教えてください。Student LinkList があり、各ノードには ID(Int) と Student Name(String) があり、ノードを挿入するコードがあります。リストはこれです:
void FileHandling::readLine(char filePath[], StudentList* sl1){
ifstream read_file;
string line;
read_file.open(filePath, std::ifstream::in);
if(read_file.is_open()){
while(read_file.good()){
getline(read_file, line);
if(line.substr(0,1)!= "#" && !line.empty() ){
//cout<<line<<endl;
std::stringstream ss(line);
int id;
std::string first_name, surname;
ss >> id >> first_name >> surname;
std::string name = first_name + " " + surname;
//cout<< id <<", "<<name<<endl;
sl1->insertSort(id,name); // insert node in an alphabetic order
}
}
}
}
これは、ユーザーから名前を取得して削除する必要がある方法です。「abc xyz」のような名前を取得すると、string name;
変数には xyz のみが含まれ、最初の名前はスキップされます。
void StudentList::deleteWN(StudentList* sl1){
//Deleting from list by getting name from user
string name;
while(true){
cout << "Deleting: Student Name 0r press 'q' to quit"<<endl;
cin >> name;
cout<<name<<endl;
if(name=="q")
break;
sl1->deleteWithNmae(name);
sl1->printList();
}
}
void StudentList::deleteWithNmae(const string& name1){
// CASE 1: Deleting from an empty list
if(head == 0){
cout<< "Node can not be deleted from an Empty List"<<endl;
}else{
// Traversing the list to find Exact Node
Student* curr = head;
Student* prev = 0;
while(curr != 0){
if(curr->name == name1){
// node found, break the while loop
// Never compare the name of curr node with the user input
// i also tried curr->name.length() == name1.length()
//and comparing the strings but i m sure i m doing something
// wrong here and cant find my node in any case.
break;
}else{
prev = curr;
curr = curr->next;
}
}
// CASE 2: Node not found
if(curr == 0){
// always execute this code, i never able to find my node
cout<< "Student "<<name1<<" not Found .."<<endl;
}else{
//CASE 3: Deleting node from the head
if(curr == head){
head = head->next;
}else{
//CASE 4: Deleteing node beyond the head
prev->next = curr->next;
}
delete curr;
size--;
}
}
}
この問題を解決してください。よろしくお願いします。