Конструктор копирования связанного списка

0

Первоначально мне приходилось создавать свой собственный связанный список с использованием 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;
            }
        }
    }
}
Теги:
linked-list
copy-constructor

1 ответ

1
Лучший ответ

В коде, где вы добавляете 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; в вашем коде.

  • 0
    Спасибо. Это кажется таким очевидным сейчас!
  • 0
    Кроме того, newNode-> next инициализируется значением NULL в конструкторе EmployeeNode.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню