Первоначально мне приходилось создавать свой собственный связанный список с использованием STL. Теперь я должен реализовать метод конструктора копий, и у меня возникают трудности с его пониманием. Пройдите тест на это через несколько дней, поэтому я бы очень хотел, чтобы это было ясно. (Тест закрыт, так что нужно действительно). Список содержит указатель * EmployeeNode * head. EmployeeNode содержит Employee и указатель на следующий EmployeeNode. Класс Employee содержит имя и зарплату.
Метод, похоже, попадает в цикл for при попытке скопировать третий узел. Я думаю, это потому, что я перезаписываю newNode, но я не знаю, как это решить.
ListOfEmployee::ListOfEmployee(const ListOfEmployee &obj)
{
head = NULL;
if(obj.head != NULL)
{
EmployeeNode *newNode = new EmployeeNode("", 0);
EmployeeNode *tempPtr;
EmployeeNode *newPtr;
//using the temp pointer to scroll through the list until it reaches the end
for(tempPtr = obj.head; tempPtr->next !=NULL; tempPtr = tempPtr->next)
{
if(head == NULL)
{
cout<<"Attempts to initialize the head"<<endl;
head = newNode; //assinging the new node to the head
newNode->emp.name = tempPtr->emp.name;
newNode->emp.salary = tempPtr->emp.salary;
cout<<"Initializes the head"<<endl;
}
else
{
cout<<"Attempts to add a new node"<<endl;
//using the temp pointer to scroll through the list until it reaches the end
for(newPtr = head; newPtr->next !=NULL; newPtr = newPtr->next)
{
cout<<"Looping through the list"<<endl;
}
//assiging the last place to the new node
newPtr->next = newNode;
newNode->emp.name = tempPtr->emp.name;
newNode->emp.salary = tempPtr->emp.salary;
cout<<"Adds a new node"<<endl;
}
}
}
}
В коде, где вы добавляете newNode в newPtr->next = newNode;
вы в основном используете ранее выделенный узел. Вы должны создать новый узел, используя новый. Что-то вроде:
newPtr->next = new EmployeeNode("", 0);
newNode = newPtr->next;
newNode->emp.name = tempPtr->emp.name;
newNode->emp.salary = tempPtr->emp.salary;
Также вы должны установить newNode->next = NULL;
в вашем коде.