好的,首先我有我的节点结构
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;
第三行在添加元素时打印出元素
是的,我知道有内存泄漏
答案 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。它更合乎逻辑(虽然你没有在那里获胜,但你会获得更多的可读性)。