C++ c++;制作链接列表的深度副本

C++ c++;制作链接列表的深度副本,c++,pointers,linked-list,deep-copy,C++,Pointers,Linked List,Deep Copy,我正在写一个用多项式进行各种运算的程序。多项式是由节点对象组成的链表。对象“节点”有两个数据成员,m_系数和m_度显然是每个单项的系数和度。对于该项目,我被赋予了执行的职能。我有默认的构造函数,我相信我已经正确地实现了它 Polynomial :: Polynomial(){ Node *m_head = NULL; } Node*m_head是多项式对象的唯一数据成员 我现在有了这个,应该是复制构造函数: Polynomial :: Polynomial(const Polynomi

我正在写一个用多项式进行各种运算的程序。多项式是由节点对象组成的链表。对象“节点”有两个数据成员,m_系数和m_度显然是每个单项的系数和度。对于该项目,我被赋予了执行的职能。我有默认的构造函数,我相信我已经正确地实现了它

Polynomial :: Polynomial(){
    Node *m_head = NULL;
}
Node*m_head是多项式对象的唯一数据成员

我现在有了这个,应该是复制构造函数:

Polynomial :: Polynomial(const Polynomial& p)
我如何使用它使p成为原始链表的深度副本

编辑:

这是节点类:

class Node {

public:

    Node();
    Node(long coeff, unsigned int deg);

    long m_coefficient;
    unsigned int m_degree;
    Node *m_next;
};

构造函数可以按以下方式查看

Polynomial :: Polynomial(const Polynomial& p) : m_head( nullptr )
{
    Node **last = &m_head;

    for ( Node *current = p.m_head; current; current = current->next )
    {
        *last = new Node( current->m_coefficient, current->m_degree );
        ( *last )->m_next = nullptr;
        last = &( *last )->m_next;
    }
}
另外,最好将类
节点
作为一个聚合。比如说

struct Node 
{
    long m_coefficient;
    unsigned int m_degree;
    Node *m_next;
};
*last = new Node { current->m_coefficient, current->m_degree, nullptr };
在这种情况下,您可以只编写示例

struct Node 
{
    long m_coefficient;
    unsigned int m_degree;
    Node *m_next;
};
*last = new Node { current->m_coefficient, current->m_degree, nullptr };
这就是构造函数的外观

Polynomial :: Polynomial(const Polynomial& p) : m_head( nullptr )
{
    Node **last = &m_head;

    for ( Node *current = p.m_head; current; current = current->next )
    {
        *last = new Node { current->m_coefficient, current->m_degree, nullptr };
        last = &( *last )->m_next;
    }
}
我想你是说

Polynomial :: Polynomial() : m_head( nullptr )
{
}


否则,您将初始化构造函数主体中的局部变量

您可以引用:@Matthew Hanson您应该显示节点是如何定义的。您还需要实现赋值运算符和析构函数,而不仅仅是复制构造函数。我还创建了析构函数和默认构造函数。但是我还添加了如何设置node类,如果您在构造函数中定义了局部变量而不是分配给成员,那么该帮助实际上失败了。谢谢!“我很感激你的帮助。”马修汉森:不。询问更多:)
多项式
没有成员
m_头
。。。我想你的意思是
p=m_head
另外,最好是有一个虚拟
节点
并复制列表,而不是双指针。最后设置m_head=
dummy.m_next