使用For循环创建链接列表(c ++)

时间:2015-07-16 00:36:14

标签: c++ for-loop linked-list new-operator

我尝试使用for循环创建链接列表,但create()方法中for循环中的“new”并没有完全分配新的插槽来存储新数据。结果,当我试图打印列表时,我得到了一个无限循环。有人能告诉我这里有什么问题吗?

struct node
{
    double value;
    node * next_ptr;
    node(){}
    node(double val, node * p): value(val), next_ptr(p) {}
    ~node(){}

};

node * create()
{
    using namespace std;
    node temp = {0, nullptr};
    node * result;
    for(int i=1; i<5; ++i)
    {
        result = new node;
        result->value = i;
        result->next_ptr = &temp;
        temp = *result;
    }
    return result;
};

1 个答案:

答案 0 :(得分:3)

你可能获得无限循环的原因是因为:

temp = *result;

您正在将*result的值复制到node类型的新对象中,该对象与您创建的对象无关。

您要做的是改为存储指针:

node* temp = nullptr;
node* result;
for(int i=0; i<5; ++i)
{
    result = new node;
    result->value = i;
    result->next_ptr = temp;
    temp = result;
}
return result;

Live demo

来自学习价值的部分,只需坚持std::forward_liststd::list,而不是列表。或者甚至更好地使用std::vector或其他容器(取决于您对容器的使用)。