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