用c ++打印(单个)链表

时间:2011-03-16 11:28:44

标签: c++

好的,首先我有我的节点结构

struct node {   
    string s;   
    node * next; 
};

它位于一个类

    class strSet{
private:

    node * first;

我可以构建列表,并且我已经检查了它是否正在构建(它是),但是当我尝试打印它时...“空集”被打印

这是我的代码“打印”它:(我尝试了很多变体来声明一个临时指针,但仍然没有)

node *temp = new node;
    temp = first;
    if (temp == NULL) cout << "Empty set" << endl;
    else {
    //  node * temp = new node;

        while (temp != NULL){
            cout << temp->s << endl;
            temp = temp->next;
        }
    }

感谢任何帮助,谢谢

编辑:我有一个函数,它创建一个单例列表(这是一个赋值),代码是:

node *first = new node;
first->s = s;
cout << first->s << endl;
first->next = NULL;

第三行在添加元素时打印出元素

是的,我知道有内存泄漏

3 个答案:

答案 0 :(得分:0)

node *temp = new node;
temp = first;

可以浓缩为 -

node *temp = first ; // An unnecessary memory leak in earlier case.

除了那个打印逻辑似乎很好。您没有显示链表如何形成的重要部分。


node *first = new node;
first->s = s;
cout << first->s << endl;
first->next = NULL;

这根本不是链接列表。您只是创建一个node*类型的实例,只需将s复制到它。

答案 1 :(得分:0)

node *temp = new node;

此行是不必要的并且泄漏内存; 其余的打印例程是正确的,因此如果“空集”是打印机,则设置为空

答案 2 :(得分:0)

从您发布的少量代码中,它应该有效,所以我的猜测是列表构造出错了。

现在,你的代码中存在一些不连贯性 - 如上所述,temp的无用“新节点”,但也有你的(temp == NULL);这个测试可以用“第一”直接操作。当然,请确保strSet首先初始化为null。

然后只有你在while()之前和之后创建temp。它更合乎逻辑(虽然你没有在那里获胜,但你会获得更多的可读性)。