gpt4 book ai didi

c++ - 创建双向链表节点的深拷贝

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:15 24 4
gpt4 key购买 nike

我的节点定义如下:

class LLNode
{
public:
std::shared_ptr<LLNode> prev;
std::shared_ptr<LLNode> next;
std::shared_ptr<int> data;
LLNode(void)
: prev(std::shared_ptr<LLNode>(nullptr)),
next(std::shared_ptr<LLNode>(nullptr)),
data(std::shared_ptr<int>(nullptr))
{
}

LLNode(const LLNode &node)
: prev(std::shared_ptr<LLNode>(node.prev == nullptr?nullptr:new LLNode(node.prev))),
next(std::shared_ptr<LLNode>(node.next == nullptr?nullptr:new LLNode(node.next))),
data(std::shared_ptr<int>(new int(node.data)))
{
}
};

但是,如果我有一个链接到另一个节点的节点(显然经常是这种情况),复制节点 A 将实例化下一个节点 B 的拷贝,而 B 又将尝试实例化节点的拷贝A,它将尝试复制节点 B,等等,直到出现计算器溢出或内存错误。这可以通过仅实例化下一个(或上一个)的新拷贝来解决,但是之前(或下一个)链接到该节点的任何内容都不会被复制。

复制双向链表节点有什么好方法吗?

最佳答案

您犯了一个错误,您试图从单个节点复制整个链/列表。在列表节点的复制构造函数中这样做没有多大意义。使复制构造函数只复制成员的值,不要递归。复制整个链/列表是 LinkedList 类的工作。

关于c++ - 创建双向链表节点的深拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com