链表值的 C++ 复制构造函数,而不是地址
C++ Copy Constructor of Linked List's values, not addresses
我一直难以理解指针和链表。我可以看到这类问题在这里被问得相当频繁,所以我很抱歉给这个论坛添麻烦了。然而,两天来我一直试图完成这项任务,但我似乎无法完成。
我应该指出这是家庭作业!
我有一个项目,其中我必须复制一个链接列表,销毁旧列表,并保留值。我几乎必须通过引用将整个列表传递给复制构造函数,而不仅仅是一个节点。
在进行了一些挖掘之后,我已经在这里看到了一些非常好的响应,而我看到的最接近我需要实现的解决方案是这个:
Coding a function to copy a linked-list in C++
当我尝试实现与我的代码类似的代码时,它在编译时给我这个错误:错误:一元‘*’(具有‘int’)链表的无效类型参数
代码如下:
IntList::IntList(const IntList &a){
if(a.head != NULL)
{
ListNode *thisNode = a.head;
ListNode *nextN = NULL;
while(thisNode != NULL)
{
ListNode *newNode = new ListNode;
newNode->value = (*thisNode->value); //error occurs here
if(nextN == NULL)
{
nextN = newNode;
}
else
{
nextN->next = newNode;
nextN = nextN->next;
}
thisNode = thisNode->next;
size++;
}
}
else
{
cout << "The list empty." << endl;
return;
}
}
如果我删除第 10 行的封装,构造函数不会发出错误。但是,一旦我调用析构函数,旧列表仍然引用刚刚清空的内存。
非常感谢对这项作业的任何帮助。我想我没有正确取消对指针的引用,但我似乎无法破解代码并使其正常工作...
而不是
newNode->value = (*thisNode->value);
你需要
newNode->value = thisNode->value;
我一直难以理解指针和链表。我可以看到这类问题在这里被问得相当频繁,所以我很抱歉给这个论坛添麻烦了。然而,两天来我一直试图完成这项任务,但我似乎无法完成。
我应该指出这是家庭作业!
我有一个项目,其中我必须复制一个链接列表,销毁旧列表,并保留值。我几乎必须通过引用将整个列表传递给复制构造函数,而不仅仅是一个节点。
在进行了一些挖掘之后,我已经在这里看到了一些非常好的响应,而我看到的最接近我需要实现的解决方案是这个:
Coding a function to copy a linked-list in C++
当我尝试实现与我的代码类似的代码时,它在编译时给我这个错误:错误:一元‘*’(具有‘int’)链表的无效类型参数
代码如下:
IntList::IntList(const IntList &a){
if(a.head != NULL)
{
ListNode *thisNode = a.head;
ListNode *nextN = NULL;
while(thisNode != NULL)
{
ListNode *newNode = new ListNode;
newNode->value = (*thisNode->value); //error occurs here
if(nextN == NULL)
{
nextN = newNode;
}
else
{
nextN->next = newNode;
nextN = nextN->next;
}
thisNode = thisNode->next;
size++;
}
}
else
{
cout << "The list empty." << endl;
return;
}
}
如果我删除第 10 行的封装,构造函数不会发出错误。但是,一旦我调用析构函数,旧列表仍然引用刚刚清空的内存。
非常感谢对这项作业的任何帮助。我想我没有正确取消对指针的引用,但我似乎无法破解代码并使其正常工作...
而不是 newNode->value = (*thisNode->value); 你需要 newNode->value = thisNode->value;