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