在C ++中复制未排序列表的构造函数

时间:2014-11-03 19:05:58

标签: c++ data-structures

我正在尝试为未排序的列表创建一个复制构造函数。以下是我的代码:

UnsortedType::UnsortedType(const UnsortedType &s)
{
    length = s.length;
    if (s.listData == NULL)
    {
        listData = NULL;
        return;
    }
    listData = new NodeType;
    NodeType *temp1 = listData, *temp2 = s.listData;
    while (temp2 != NULL)
    {
        temp1->info = temp2->info;
        temp2 = temp2->next;
        temp1->next = new NodeType;
        temp1 = temp1->next;
    }
    temp1 = NULL;
}

我不知道为什么但是最后一个节点没有设置为NULL。这在调用析构函数时会导致问题。析构函数删除节点,直到找到一个设置为NULL的节点。由于没有节点设置为NULL,因此它会一直删除,直到遇到运行时错误。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

问题是如果temp2在语句中为null:

temp2 = temp2->next;

然后你不必为

分配内存
temp1->next = new NodeType;

然后在语句结束时将temp1设置为NULL:

temp1 = NULL;

理想的代码应该是:

    while (1)
    {
        temp1->info = temp2->info;
        temp2 = temp2->next;
        if (temp2 != NULL) //Where temp2 is copyable
        {
             temp1->next = new NodeType;
             temp1 = temp1->next;
        }
        else
        {
             temp1->next = NULL;
             break;
        }
    }

答案 1 :(得分:-1)

您将temp1设为NULL;那只是一个局部变量。这是一件无用的事情。

我不清楚您的数据结构是如何工作的,但可能您想将最后temp1->next设置为NULL