好的,所以我正在编写一个Node类,它是类型Element的容器。我应该编写一个复制构造函数来迭代Node类的链接并复制每个节点。
对于Node类,唯一的变量是Element(包含的数据)和指向下一个节点的指针,如果没有下一个节点,它将指向nullptr。
我知道我需要制作一个“深层”副本,并为每个指向的节点创建新节点。
我所拥有的是这样的:
Node::Node(const Node& rhs)
{
ele(the element) = rhs.ele;
next = rhs.next;
Node cur = Node(ele);
cur.next = next;
while(cur.next != nullptr)
{
Node* n = new Node(cur.ele);
(*n).next = cur.next;
cur = *(cur.next);
}
return *this;
}
显然这根本不起作用。据我所知,保留副本我需要将新节点存储在堆上并继续分配新节点,直到我点击nullptr,但我不确定如何实现这一点。谢谢!
答案 0 :(得分:0)
您将节点的概念与列表的概念混淆在一起。类节点没有复制构造函数。它是类列表,必须有一个复制构造函数。
如果您的列表只是指向头部节点的指针,那么您需要编写一个单独的函数来克隆现有列表。
例如,该功能可以采用以下方式
Node * Clone( const Node *head )
{
Node *new_head = nullptr;
if ( head )
{
new_head = new Node { head->ele, nullptr };
for ( Node *p1 = head, *p2 = new_head; p1->next; p1 = p1->next, p2 = p2->next )
{
p2->next = new Node { p1->next->ele, nullptr };
}
}
return new_head;
}