【问题标题】:C++ Stacked List push function printing next/previous elementC ++堆叠列表推送功能打印下一个/上一个元素
【发布时间】:2016-05-17 06:24:19
【问题描述】:

我刚刚对打印出以前的值有疑问。代码在推入堆栈顶部时打印出一切正常,但是当我尝试输出前一个头时,它只是指向一个内存地址。

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

试过了,还是坏了。

【问题讨论】:

    标签: c++ pointers linked-list stack


    【解决方案1】:

    newNode-&gt;next 是指向列表中下一个元素的指针。这自然是一个内存地址。所以,

    cout << "Previous is: " << newNode->next << endl;
    

    打印出栈中下一个元素的内存地址。您需要的是下一个元素的值。当您有一个指向对象的指针并且需要访问该对象中的某些内容时,您可以使用箭头运算符 (-&gt;)。所以你的代码应该是:

    cout << "Previous is: " << newNode->next->value << endl;
    

    如果没有下一个元素怎么办(插入第一个元素时总是这样)?在您的情况下,newNode-&gt;next 将是 NULL,当您第一次输入元素时会导致不希望的结果。所以需要检查是不是NULL:

    if (newNode->next != NULL)
    {
        cout << "Previous is: " << newNode->next->value << endl;
    }
    else
    {   
        cout << "No previous element" << endl;
    }
    

    【讨论】:

    • 我试过 newNode->next->value 但输出中断。我的 if 语句是否会导致它立即停止,因为一开始堆栈是空的并且 top = null?
    • 好吧,成功了。谢谢!尝试通过执行 if (!newNode->next = NULL) 放置空指针检查器时,我的语法混淆了。
    【解决方案2】:

    如果新节点是第一个压入堆栈的节点(您将访问 nullptrs),则输出将中断尝试访问新节点。在尝试打印之前测试 null。

    编辑:此答案应与 LogicStuff 的建议结合使用。

    【讨论】:

      【解决方案3】:

      如果newNode-&gt;value 是值,如果newNode-&gt;next 是下一个节点,则newNode-&gt;next-&gt;value 可能是下一个(前一个头或top)节点的值。

      你也不能打印下一个节点的值,如果没有的话。所以检查一下:

      if(newnode->next)
          cout << "Previous is: " << newNode->next->value << endl;
      

      【讨论】:

      • 哦,我忘了说我试过 newNode->next->value。但输出在尝试推动时立即中断。
      • @user2444400 你应该提到它的问题。请编辑您的问题。
      猜你喜欢
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      相关资源
      最近更新 更多