Я только начал изучать C ++.
Я пытаюсь создать связанный список без использования класса. Итак, в основной функции у меня есть указатель головы и хвоста. После этого я прошу пользователя выполнить задание. Пользователь должен ввести A, если он хочет добавить нового студента. Чтобы распечатать список, пользователь должен ввести P и выйти из программы. Для написания этой задачи я написал следующую программу:
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
struct Student {
string name;
Student* next;
};
void add_student(Student *, Student *);
void print_list(Student *);
int main()
{
Student *head, *tail;
head=NULL;
tail=NULL;
while (true) {
cout << "\nOptions:\n";
cout << "To add Student [A]\n";
cout << "To print Student list [P]\n";
cout << "Quit Q [Q]\n";
string choice = "";
cin >> choice;
if (choice.compare("A") == 0) {
add_student(head, tail);
cout << "Book successfully added.\n";
}
else if (choice.compare("P") == 0) {
print_list(head);
}
else if (choice.compare("Q") == 0) {
cout << "Bye!";
break;
}
else {
cout << "Invalid choice.\n";
}
}
}
void add_student(Student *head, Student *tail)
{
string name;
cout << "Enter name of student \n";
cin >> name;
Student *temp = new Student;
temp->name = name;
temp->next = NULL;
if(head==NULL)
{
head=temp;
tail=temp;
temp=NULL;
}
else
{
tail->next=temp;
tail=temp;
}
// Check student has been added successfully.
print_list(head);
}
void print_list(Student *head)
{
cout << "Student list is as following:\n";
Student *temp=new Student;
temp=head;
while(temp!=NULL)
{
cout<< temp->name <<"\n";
temp = temp->next;
}
}
Однако проблема в том, что каждый раз, когда добавляется новый студент, он добавляется в качестве первого элемента в списке, а не добавляется в последний. Я думаю, что я делаю некоторые ошибки с Pass по ссылке.
Прошу вас проверить и подсказать, где я совершаю ошибку. Это было бы очень полезно, потому что я новичок в C ++, и я действительно хочу учиться на своих ошибках.