【发布时间】:2022-11-28 17:03:35
【问题描述】:
在编程任务中,我需要克隆一个链表(它是一个复制构造函数,所以除了克隆之外不返回任何东西)。旧链表将经历一些删除和添加元素,但新克隆的链表应保持不变。我怎么做?当我删除新节点并将其添加到旧列表时,它也会对新链表执行相同的操作。我怎样才能避免这种情况?
this->head = other.head;
this->head->val = other.head->val;
SNode *curr = other.head->next;
SNode *newCurr = nullptr;
while (curr != nullptr) {
newCurr = curr;
curr = curr->next;
}
}
我试过上面的代码,但是当我修改旧列表时,即添加和删除节点时,它也会在新列表中添加和删除节点。我该怎么做才能避免在新列表中发生修改?
【问题讨论】:
-
您的代码不会向
this->head->next[i]添加任何内容,如果这是您想要的。 -
@Someprogrammerdude 对此表示歉意,[i] 用于跳过列表。我修改了我的代码以适用于链接列表,因此更容易理解。
-
如果这是您的目的,您仍然没有将任何内容复制到
this对象。您只需从第二个节点到最后一个节点遍历列表。newCurr = curr赋值实际上是无用的,什么也不做。 -
如果你要克隆一个列表,那么你肯定需要为新列表分配一些新节点。您的代码不会那样做,所以它不可能是正确的。
标签: c++ linked-list skip-lists