为什么我的简单链接列表在第一个节点之后不起作用?

时间:2018-12-16 16:02:56

标签: c++ linked-list

我编写这段代码是为了自动获取值并将它们放在链表中,但它仅维护第一个,并替换第二个节点中的任何新值,而不会成为第三个,第四个或...个节点。

    #include <iostream>

    using namespace std;

    struct node
    {
        int a;
        struct node *next;
    }zero;

    node *first = NULL;


    int main()
    {
        int t;
        for (int i = 0;i < 10;i++)
        {
            node *n = first;
            cin >> t;
            if (first == NULL)
            {
                node temp;
                temp.a = t;
                first = &temp;
                temp.next = NULL;
            }
            else
            {
                while ((*n).next != NULL)
                {
                    n = (*n).next;
                }
                node tt;
                tt.a = t;
                (*n).next = &tt;
                tt.next = NULL;
            }
        }
    }

我插入了28。 我的第一个节点数据= 28。 我插入了57。 我的第二个节点数据= 57。 我插入了120。 我的第二节点数据= 120。 ...

1 个答案:

答案 0 :(得分:2)

复合语句中的

node temp;声明一个自动变量。 first = &temp;分配first指向自动变量。

自动变量在作用域的末尾自动被破坏-在这种情况下,if语句的复合子语句。之后,first不再指向有效对象-它变成了悬空指针。

在下一次迭代中,您执行node *n = first,然后在else分支中执行*n时,您将间接悬空指针。该程序的行为是不确定的。