c++ - 单链表 C++

标签 c++ pointers linked-list

大家好, 我现在正在为期中考试学习,正在努力尝试使用单链表创建一个简单的程序。我想让它做的就是将“1”、“2”、“3”、“4”插入列表并打印出来。请看下面的代码:

#include <iostream>
#include <string>
using namespace std;

class node{
public:
    node(int data);
    friend class slist;
private:
    int data;
    node *next;
};

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

class slist{
public:
    slist(){
        head = NULL;
    }
    void insert(int item);
    void output();

private:
    node* head;
};   

void slist::insert(int item){
    node* newnode = new node(item);
    if(head == NULL)
    {
        head = newnode;
    }
    else
    {
        newnode->next = head;
        head = newnode;
    }
}

void slist::output(){
    node* p = head;
    while (p->next != NULL){
        cout << p->data << " ";
        p = p->next;
    }
    cout << p->data << " ";
}

int main(){
    slist FINAL;

    FINAL.insert(1);
    FINAL.insert(2);
    FINAL.insert(3);
    FINAL.insert(4);

    FINAL.output();

    return 0;
}

它编译得很好,但它打印出(我猜)指针而不是实际数字。谁能告诉我为什么?

非常感谢!

最佳答案

node 构造函数中存在错误。参数 data 与名为 data 的 memeber 变量冲突。这应该修复它:

node::node(int data){
    this->data = data;
    next = NULL;
}

更好的选择是将参数重命名为其他名称。还可以考虑使用 initialization list :

node::node(int d) : data(d), next(NULL) { }

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

相关文章:

c++ - 将数组传递给没有函数的函数,因此无论如何它都不会更改原始数组

c++ - 如何创建仅调用祖父构造函数的构造函数?

c - 尝试用空格和引号标记字符串

C 编程错误,打印链表,在运行时执行代码崩溃

c++ - 如何在 C++ 中使变量成为未确定的类型?

c++ - 可以在 C++17 中模拟 C++2 0's ' operator==(const T&) = default' 吗?

c# - 需要将 c++ 转换为 c# 的解决方案

c - 如何比较指针和整数?

char *name[] 指针数组还是指向数组的指针?

java - 将文件内容复制到链表数组中并对其进行排序