c++ - C++中一个简单的链表实现

标签 c++ class pointers 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;
    }
}

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

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

请帮我弄清楚我哪里出错了。

最佳答案

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

关于c++ - C++中一个简单的链表实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6384255/

相关文章:

c++ - 在 void 指针指向的内存中创建一个对象

C 的未定义行为

c++ - 语言分析的二叉树实现 - 子节点作为节点 : does not work

c - 双向链表。代码有效...应该吗?比其他解决方案少得多的代码

c++ - 适用于 PostgreSQL 的优秀 C/C++ 连接器库

class - 使用定义的输入过程从 Fortran 中的二进制文件中读取错误值

c++ - 使用类的成员函数时程序崩溃,但在 main() 中直接实现该函数时不会崩溃

c++ - 在C++中初始化对象中的数组

c++ - 执行 populate_sdk 时如何使用 yocto 在 native sysroot 中安装文件?

c++ - std::tuple get() 成员函数