我最初必须使用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;
}
}
}
}
最佳答案
在要在newPtr->next = newNode;
中添加newNode的代码中,基本上是在使用先前分配的节点。您应该使用new创建一个新节点。就像是:
newPtr->next = new EmployeeNode("", 0);
newNode = newPtr->next;
newNode->emp.name = tempPtr->emp.name;
newNode->emp.salary = tempPtr->emp.salary;
另外,您还应该在代码中设置
newNode->next = NULL;
。关于c++ - 链表拷贝构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20153782/