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



尝试为链表类编写一个简单的复制构造函数。我的类很简单,变量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;

}

您没有在代码中进行任何node分配。事实上,每个node应该只属于一个queue。因此,通过复制v,您应该分配与v相同数量的node

注意,在下面的代码中,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;
    }
}

相关内容

  • 没有找到相关文章

最新更新