我的链表类的复制构造函数有问题。 函数正常工作,但 visual studio 调试器有一个“滞后”,所以我可以假设该函数内部发生了一些不好的事情。 我无法捕获错误,而且我不知道我的逻辑有什么问题。 这是代码:
Linked_List::Linked_List(const Linked_List & obj)
: head(nullptr)
{
Node * currrentNode = obj.head;
Node * lastNode = nullptr;
while (currrentNode != nullptr)
{
Node * newNode = new Node;
newNode->character = currrentNode->character;
if (head != nullptr)
{
head = newNode;
lastNode = head;
}
else
{
lastNode->next = newNode;
lastNode = newNode;
}
currrentNode = currrentNode->next;
}
}
最佳答案
该代码以错误的方向插入新节点。您正在从前到后循环遍历源列表(正如您应该做的那样),但您正试图以从后到前的顺序将节点插入到目标列表中。但是您根本不会分配 head
,并且在它被分配指向节点之前访问 lastNode
。更糟糕的是,即使您正确分配了 head
和 lastNode
,您也没有更新每个新节点以指向前一个 head
节点当您用新节点替换当前 head
时,它的 next
节点。所以你的目标列表仍然会是格式错误和内存泄漏。
代码应该改为按从前到后的顺序插入新节点:
Linked_List::Linked_List(const Linked_List & obj)
: head(nullptr)
{
Node * currentNode = obj.head;
Node * lastNode = nullptr;
while (currentNode)
{
Node * newNode = new Node;
newNode->character = currentNode->character;
if (lastNode)
lastNode->next = newNode;
else
head = newNode;
lastNode = newNode;
currentNode = currentNode->next;
}
}
可以简化为:
Linked_List::Linked_List(const Linked_List & obj)
: head(nullptr)
{
Node * currentNode = obj.head;
Node ** newNode = &head;
while (currentNode)
{
*newNode = new Node;
(*newNode)->character = currentNode->character;
newNode = &(newNode->next);
currentNode = currentNode->next;
}
}
关于c++ - 链表的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51256529/