C ++ Stacked List推送功能打印next / previous元素

时间:2016-02-07 15:20:37

标签: c++ pointers linked-list stack

我刚才有一个关于打印出前一个值的问题。代码打印出一切都很好,当它推到堆栈顶部时,但是当我尝试输出前一个头时它只是指向一个内存地址。

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

已经尝试但是仍然被打破了。

3 个答案:

答案 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的建议一起使用。