我刚才有一个关于打印出前一个值的问题。代码打印出一切都很好,当它推到堆栈顶部时,但是当我尝试输出前一个头时它只是指向一个内存地址。
void linkedListStack::push(int v)
{
listNode *newNode = new listNode;
newNode->value = v;
newNode->next = NULL;
if (top != NULL)
{
newNode->next = top;
}
top = newNode;
cout <<"Pushed "<< newNode->value << " onto the top of the stack." << endl;
cout << "Previous is: " << newNode->next << endl;
}
push函数从文件读取整数并将数据推送到堆栈,但我不确定如何打印下一个/上一个值。
编辑:
newNode->next->value
已经尝试但是仍然被打破了。
答案 0 :(得分:1)
如果newNode->value
是值,而newNode->next
是下一个节点,则newNode->next->value
可能是下一个(前一个头或top
)节点的值。
如果没有,也无法打印下一个节点的值。所以请检查一下:
if(newnode->next)
cout << "Previous is: " << newNode->next->value << endl;
答案 1 :(得分:1)
T
是指向列表中下一个元素的指针。这是一个内存地址。所以,
newNode->next
打印出堆栈中下一个元素的内存地址。你需要的是下一个元素的价值。如果有指向对象的指针并且需要访问对象中的某些内容,则使用箭头运算符(cout << "Previous is: " << newNode->next << endl;
)。所以你的代码应该是:
->
如果没有下一个元素也是如此(插入第一个元素的情况总是如此)?在您的情况下,cout << "Previous is: " << newNode->next->value << endl;
将为newNode->next
,当您第一次输入元素时会导致意外结果。所以你需要检查它是NULL
:
NULL
答案 2 :(得分:1)
如果第一个被推入堆栈(你正在访问nullptrs),输出将会破坏尝试访问新节点。在尝试打印之前测试null。
编辑:这个答案应该与LogicStuff的建议一起使用。