c++追加到链表

标签 c++

我正在编写一段代码将一个节点追加到单链表的末尾,但它似乎根本没有追加任何东西。谁能告诉我我做错了什么?

#include<iostream>
using namespace std;

struct Node{
        int val;
        Node* next;
        Node(int v) : val(v), next(NULL) {}
};

void append(Node &head, int d){
        Node n = head;    
        while(n.next != NULL){
                n = *n.next;
        }
        Node end(d);
        n.next = &end;
}

int main(){
        Node head(0);
        for(int i=1;i<5;i++){
                append(head, i);
        }    
        Node n = head;
        while(n.next != NULL){ //print the linked list, result is 0
                cout << n.val<<" ";
                n = *n.next;
        }
        cout<<n.val<<endl;
        return 0;
}

编辑:我更改了 append() 方法以每次附加一个动态分配的节点,但它仍然不起作用。

void append(Node &head, int d){
            Node n = head;    
            while(n.next != NULL){
                    n = *n.next;
            }
            Node* end = new Node(d);
            n.next = end;
    }

最佳答案

您将 local 对象 Node end(d); 附加到链表的末尾。此对象在 append 存在时被销毁,最后一个列表元素指向一个不存在的对象。

关于c++追加到链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523180/

相关文章:

c++ - 使用 std::vector<char> 作为变体

c++ - 将 SVN 修订版转换为整数的 C 宏

c++ 函数模板指定第二个模板参数类型

c++ - 控制如何将参数从子类构造函数声明发送到父类(super class)构造函数 (C++)

c++ - 圈到圈交点

c++ - LNK2001 静态属性和方法错误(Qt、C++)

c# - java注释与C#属性相同吗? C++ 中的等价物是什么?

c++ - 如何在 string_view 中推断出悬空指针?

c++ - 如何在 C++ 中定义友元函数和运算符重载

c++ - 如何检查 tiff 文件的无效格式错误