【发布时间】:2016-12-23 07:04:33
【问题描述】:
我刚刚完成了一个单列表复制构造函数的工作,我现在正着手制作一个双列表复制构造函数。谁能告诉我它与单列表构造函数有什么不同,因为我在重新开始我的双链表复制构造函数或复制我的单列表复制构造函数之间存在冲突。我该怎么办?
如果有帮助,这是我的单链表中的复制构造函数:
List(const List ©ing) : head(NULL)
{
Node* cur = copying.head;
int size = copying.size();
Node* end = NULL;
for(int q = 0; q < size; q++)
{
Node* n = new Node;
n->value = cur->value;
if (head == NULL)
{
head = n;
end = head;
}
else
{
end->next = n;
end = n;
}
cur = cur->next;
}
end->next = NULL;
}
欢迎任何和所有输入。谢谢大家:-)
【问题讨论】:
-
如果您从一个空列表复制,您的单链表复制构造函数将会崩溃。链表的第一条规则:永远不要有特殊情况。
Node** target = &head; for (Node* cur = copying.head; cur; cur=cur-next) { Node* n = new Node(cur->value); *target = n; target = &(n->next); } *target = nullptr; -
“炸毁”到底是什么意思 @MartinBonner?我实际上是 C++ 编程的新手。
-
@PeterG 该链接与复制构造函数无关。我已经检查过了,但它没有回答我关于双向链表的复制构造函数的查询。
-
对不起。在下面回复之前没有注意到您的评论。当列表为空时,您永远不会将
end设置为 NULL 以外的任何值,然后您写入end->next- 这将(幸运地)导致访问冲突。 (如果没有,您可能正在嵌入式设备上运行,并且刚刚在某处喷射了中断向量。) -
我明白了,@MartinBonner。我错过了我的代码中的那个小故障:(。谢谢你澄清它!
标签: c++ copy-constructor doubly-linked-list