Single linked lists C++

Single linked lists C++

本文关键字:C++ lists linked Single      更新时间:2023-10-16

嘿伙计们,我现在正在学习期中考试,正在努力尝试使用单个链表创建一个简单的程序。 我想要它做的只是将"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 的成员变量冲突。这应该可以解决它:

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

更好的选择是将参数重命名为其他名称。还可以考虑使用初始化列表:

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

线路data = data对您来说是一个问题。将参数重命名为与成员不同的参数。这应该会给你一系列成员变量的垃圾值(不是指针) data .

注意:这是命名约定区分成员变量的原因之一,无论是跟踪还是引导_m_或任何平衡是黑白信息和美学的地方。

好吧,我认为两个实例都data

data = data;

是本地的;因此node的数据成员永远不会获得分配给它的任何内容。 打印的是未定义的值,而不是地址。 无论如何,这在风格上都很糟糕;这里有很多约定,但对于类成员来说_data一个好的约定,对于函数参数data约定。 进行简单的更改,看看这是否不能解决您的问题。