首先,这是我目前试图解决的任务的一部分。我正在尝试创建一个深度复制给定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循环中,我正在复制当前节点的数据以及指向下一个节点的指针。 最后,我将下一个指针设置为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.head。但是,因为给出了这个函数是const的。我无法设置它。
还有另一个功能: LinkedList& LinkedList :: operator =(const LinkedList& ll) { } 我怀疑可能需要。我希望我可以使用它。
答案 0 :(得分:2)
您需要在添加新内存或新列表元素时分配它们,更改代码以执行以下操作:
<div class="item active">
<img class="first-slide" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt="First slide">
<div class="container">
<div class="carousel-caption">
<h1>Example headline.</h1>
<p>Note: If you're viewing this page via a <code>file://</code> URL, the "next" and "previous" Glyphicon buttons on the left and right might not load/display properly due to web browser security rules.</p>
<p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p>
</div>
</div>
</div>
此外,在你的课堂上摆脱// LinkedList.cpp
LinkedList::LinkedList(const LinkedList & ll)
{
if (ll.head == nullptr)
return;
// Create a temp variable since ll.current doesn't move/change.
node* tmp = ll.head;
// Allocate a new node in memory.
head = new node;
// Copy over the value.
head->value = tmp->value;
// Set the 'next' value to null (the loop will fill this in).
head->next = nullptr;
// Point 'current' to 'head'.
current = head;
// Move to next item in ll's list.
tmp = tmp->next;
while (tmp != nullptr)
{
// Allocate new memory for a new 'node'.
current->next = new node;
// Point to this new 'node'.
current = current->next;
// Copy over the data.
current->data = tmp->data;
// By default set the 'next' to null.
current->next = nullptr;
// Move along ll's list.
tmp = tmp->next;
}
}
。没有必要,只需对typedef node* nodePtr
,node*
和head
使用current
即可。最后,不要忘记在你的类'析构函数中清除动态分配的内存:
temp
答案 1 :(得分:1)
这不起作用,因为您从不为实际列表对象分配新的列表元素(使用&#39; new&#39;运算符),而只重用现有的列表元素。如果ll的元素多于实际列表,请考虑一下会发生什么?