单链表C ++

时间:2011-05-17 03:53:44

标签: 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;
}

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

非常感谢!

3 个答案:

答案 0 :(得分:6)

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

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

更好的选择是将参数重命名为其他内容。另请考虑使用initialization list

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

答案 1 :(得分:3)

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

data = data行是您的问题。将参数重命名为与成员不同。这应该为成员变量data提供一系列垃圾值(而不是指针)。

注意:这是命名常规区分成员变量的原因之一,可以是traling或者引导_m_,也可以是平衡是b / w信息和美学的地方。

答案 2 :(得分:1)

好吧,我认为

中的data两个实例
data = data;

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