链表值的 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;