【发布时间】:2017-04-09 11:08:56
【问题描述】:
首先,这是我目前正在尝试解决的一项任务的一部分。我正在尝试创建一个复制构造函数来深度复制给定的 LinkedList。 我已经编写了 LinkedList 方法。
这是 LinkedList.h 文件的必要部分。
LinkedList.h
private:
struct node {
Val data;
node* next = nullptr;
};
typedef struct node* nodePtr;
nodePtr head = nullptr;
nodePtr current = nullptr;
nodePtr temp = nullptr;
};
给定参数:“LinkedList::LinkedList(const LinkedList & ll)” ll 是要复制的链表。 我首先测试了链表中是否有头部,如果没有,则表示链表为空。 然后我将头部从旧列表复制到新列表中。 然后我将新的电流设置到头部,为 while 循环做准备。 在 while 循环中,我正在复制当前节点的数据以及指向下一个节点的指针。 最后,我将 next 指针设置为 nullptr 以表示新列表的结束。
LinkedList.cpp
LinkedList::LinkedList(const LinkedList & ll){
if (ll.head == nullptr) {
return;
}
head = ll.head;
current = head;
while (ll.current->next != nullptr) {
current->data = ll.current->data;
current->next = ll.current->next;
}
current->next = nullptr;
}
我不确定这是否是深度复制。 我也知道 ll.current 的起始位置不在头部。 我试过 ll.current = ll.head。但是,既然给定这个函数是 const 的。我不能这样设置。
还给出了另一个函数: LinkedList & LinkedList::operator=(const LinkedList & ll) { } 我怀疑可能需要。我希望我可以选择使用它。
【问题讨论】:
-
先写复制构造函数和析构函数。一旦你实现了这些函数,赋值运算符就很简单了。此外,如果
ll.head是nullptr,您的复制构造函数会立即出错。原因是你没有初始化任何成员——你只是return。 -
这不是深度复制。深度复制涉及在将值复制到成员之前为其分配内存。
-
另外,您当前正在覆盖
current->data和current->next中的值,而不更改current指向的位置。
标签: c++ struct linked-list