使用带有链表的复制构造函数

时间:2014-03-18 22:13:32

标签: c++ visual-c++ linked-list copy-constructor

在我的项目中,我试图制作它,以便我可以制作链表的副本,然后显示其内容。目前我有它的工作,但每次我尝试退出程序崩溃。我删除了程序主要部分中使用的复制构造函数的实例,所以问题似乎来自那里。这是代码:

struct ListNode{
    int num;
    struct ListNode *next;
};
ListNode *head;

List::List( const List& org){
   ListNode *copy=org.head;
   ListNode *temp;
   if(copy==NULL){
     head=NULL;
   }
   else{
     head=copy;
     while(copy!=NULL){
        temp=new ListNode;
        temp->num=copy->num;
        temp=temp->next;
        copy=copy->next;
     }
   }

}

请注意,我知道有些方括号{}稍微偏离了程序本身,直到我尝试退出,所以我想知道如何阻止程序崩溃?

2 个答案:

答案 0 :(得分:2)

拿一张大纸,勾勒出要复制的列表(让我们说4个节点),然后按照必须一步一步的步骤进行操作。然后看看如何将其转换为代码。

上面的代码创建了一堆断开连接的节点,而不是列表。

答案 1 :(得分:0)

新创建的列表中有一个head,指向复制的实例head。因此,如果删除这两个列表,您最终会尝试删除相同的内存两次(我假设您的析构函数尝试删除节点)。 顺便说一句,创建的节点是分配的,但没有被引用(即你有内存泄漏)。您可能需要查看Coding a function to copy a linked-list in C++以获得一个非常相似的问题的答案。