C++中的简单链接列表实现

Nit*_*arg 1 c++ pointers class linked-list

我试图用c ++实现一个简单的链表.我可能在某处犯了一个愚蠢的错误.通过这个我想学习C++中的类和指针.对于代码

#include <iostream>
using namespace std;

class node
{
public: 
    node* next;
    int data;

    node(int d);
    void append(int d);
}; 

node::node(int d)
{
    data = d;
    next = NULL;
}


void node::append(int d)
{
    node nw = node(d);
    if(next==NULL)
        next = &nw;
    else
    {
        node *n = next;
        while((*n).next!=NULL)
        {
            n = (*n).next;
        }
        (*n).next = &nw;
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到81作为1旁边的节点.

int main()
{
    node n = node(1);
    n.append(3);
    n.append(2);
    n.append(81);
    n = *(n.next);
    cout<< n.data << '\n';
}
Run Code Online (Sandbox Code Playgroud)

请帮我弄清楚我在哪里弄错了.

Aas*_*set 6

可能存在其他错误,但这非常危险:您正在创建一个局部变量来表示新节点:node nw = node(d);,然后您将列表中的最后一个节点指向nw.但是,由于nw是局部变量,因此当函数返回时它将不再存在.所以next最后一个节点的指针现在指向不再存在的东西.您需要使用new node(d)(返回指向a的指针node)以创建在函数返回后将继续存在的对象.