Я определил что-то вроде моего узла:
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, который, в свою очередь, будет пытаться создать копию узла. A, который будет пытаться скопировать узел B и т. Д. До тех пор, пока не возникнет переполнение стека или ошибка памяти. Это можно исправить, только создав экземпляр новой копии next (или prev), но тогда ничто, связанное ранее (или next) с этим узлом, не будет скопировано.
Есть ли хороший способ скопировать двусвязный узел списка?