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

为何无法实现inverseList函数?栈式链表反转执行无跳转异常

栈实现链表反转时inverseList函数失效的常见排查点
  • 函数调用层面的低级错误

    • 检查inverseList的调用拼写:C语言大小写敏感,别把函数名写错(比如写成InverseList或inverselist)。
    • 确认函数声明位置:如果函数定义在main之后,必须在调用前声明(比如在文件开头加struct ListNode* inverseList(struct ListNode* head);),否则编译器会默认它返回int,导致调用时跳转异常。
  • 栈实现的逻辑漏洞

    • 栈初始化是否正确:如果用数组实现栈,栈顶指针要初始化为-1;用链表实现栈,栈顶要初始化为NULL。初始状态错了,入栈出栈全白搭。
    • 入栈操作是否正确:遍历原链表时,要把节点指针压入栈,别误压节点的值。同时要确保遍历过程中链表指针正常移动(head = head->next),不然会死循环压入同一个节点。
    • 出栈操作是否做了空判断:出栈前必须检查栈是否为空,空栈还继续弹会触发空指针访问,直接让函数崩掉。
  • 链表反转的核心逻辑错误

    • 新头节点是否正确记录:反转后的头节点是原链表的尾节点,也就是第一个弹出栈的节点,要是没把这个节点存下来,反转后的链表就没了入口。
    • 节点指针重连是否正确:弹出节点后,要把当前节点的next指向前一个弹出的节点(比如用一个临时指针记录上一个节点),别写成指向栈顶或者直接置为NULL,不然链表会断成一截一截的。
    • 原头节点的next是否置空:反转后的最后一个节点是原头节点,必须把它的next设为NULL,不然会形成循环链表,后续遍历直接死循环。
  • 边界情况没处理

    • 空链表直接返回:如果传入的头指针是NULL,别执行入栈操作,直接返回NULL就行,不然会触发空指针访问。
    • 单节点链表直接返回原节点:没必要走栈流程,省得折腾出问题。
  • 快速调试技巧

    • 在inverseList第一行加printf("进入inverseList函数\n");,看有没有输出——没输出就是调用问题,输出了就是内部逻辑问题。
    • 用调试器分步走:盯着链表遍历入栈的每个节点,再看弹出时每个节点的next指针指向,一眼就能找到哪里错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:57:20