You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++链表实现栈的pop函数删除尾节点后出现随机值如何修复

问题原因

你的pop函数仅释放了尾节点的内存,没有修改尾节点前驱节点的next指针,导致该指针成为野指针,指向已被释放的内存空间,所以访问时会出现随机值,链表的节点删除逻辑实际没有完成。

修复方案

调整遍历逻辑,同步记录尾节点和它的前驱节点,释放尾节点后将前驱节点的next指针置空,修复后的代码如下:

int pop(stack* s)
{
    if (!isEmpty(s))
    {
        stack* prev = s;
        stack* curr = s->next;
        // 遍历到尾节点,prev记录尾节点的前驱节点
        while (curr->next != NULL)
        {
            prev = curr;
            curr = curr->next;
        }
        // 释放尾节点内存
        delete curr;
        // 前驱节点的next置空,避免野指针
        prev->next = NULL;
        return 1;
    }
    return -1;
}
额外优化建议

你当前采用尾插尾删的方式实现栈,每次pop操作都需要遍历整个链表,时间复杂度为O(n)。如果改成头插头删的实现逻辑,push和pop的时间复杂度都可以降到O(1),运行性能会更好。

内容的提问来源于stack exchange,提问作者roee attias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:06:05