C ++为简单链表编写复制构造函数

时间:2016-10-09 20:51:37

标签: c++ linked-list copy-constructor

尝试为链表类编写一个简单的复制构造函数。我的类很简单,我有一个变量First指向第一个节点,一个变量Last指向最后一个节点。

它是单链接的,所以每个节点只指向下一个节点,之前没有。尝试编写一个复制构造函数,但发现最后一个节点似乎仍然指向同一个地址,例如,如果我向复制的列表添加一些内容,它也会显示在原始节点中。

到目前为止我所拥有的:

queue::queue(const queue &v){
    first = v.first;
    last = v.last;


    first-> value = v.first->value;

    node *curr = first;
    node *otherCur = v.first;
    while(otherCur->next != NULL){
        cout << "------Next is: " << otherCur->next->value << endl;
        curr ->next = otherCur->next;
        curr->next->value = otherCur->next->value;
        curr = curr->next;
        otherCur = otherCur->next;

    }
    curr->next = NULL;


}

1 个答案:

答案 0 :(得分:0)

您的代码中没有进行任何node分配。实际上,每个node应该只属于一个queue。因此,通过复制v,您应该分配与node中的v一样多的queue

请注意,在以下代码中,queue::queue(const queue &v) : first(NULL), last(NULL) { if (v.first) { first = new node(*v.first); first->next = NULL; last = first; // first-> value = v.first->value; // copy constructor should have done that node *curr = first; node *otherCur = v.first; while(otherCur->next != NULL){ cout << "------Next is: " << otherCur->next->value << endl; curr->next = new node(*otherCur->next); curr->next->next = NULL; last = curr->next; // curr->next->value = otherCur->next->value; curr = curr->next; otherCur = otherCur->next; } // curr->next = NULL; } } 的析构函数应删除所有已创建的节点。

stringstream ss(line);