簡體   English   中英

C ++制作鏈表的深層副本

[英]c++ making a deep copy of a linked list

我正在編寫一個程序,可以對多項式進行各種運算。 多項式是由節點對象組成的鏈表。 對象“節點”具有兩個數據成員,m_coefficient和m_degree顯然是每個單項式的系數和程度。 對於項目,我可以執行功能。 我有默認的構造函數,我相信我已經正確實現了。

Polynomial :: Polynomial(){
    Node *m_head = NULL;
}

節點* m_head是多項式對象的唯一數據成員。

我現在有這個應該是副本構造函數:

Polynomial :: Polynomial(const Polynomial& p)

如何使用它來復制原始鏈表的深層副本。

編輯:

這是Node類:

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;
    }
}

另外,最好將Node類作為一個聚合。 例如

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 )
{
}

要么

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

否則,您將在構造函數的主體中初始化局部變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM