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

LeetCode 503题:栈判空顺序错误导致运行时异常咨询

问题原因:逻辑与的短路求值特性

问题的核心是逻辑与(&&)的短路求值规则,以及C++栈top()方法的调用限制:

  • C++中,调用stack::top()时如果栈为空,属于未定义行为,会直接触发运行时错误(比如程序崩溃)。
  • 逻辑与运算符&&遵循短路求值:只有左边条件为真时,才会判断右边条件;若左边条件为假,右边条件会被直接跳过,不会执行。

两种写法的对比

正确写法

while(!st.empty() && nums[i%n] >= st.top()) st.pop();

这里先判断!st.empty():

  • 若栈为空,!st.empty()为假,整个&&表达式直接为假,右边的nums[i%n] >= st.top()不会执行,避免了空栈调用top()的错误。
  • 若栈非空,再判断当前元素是否大于等于栈顶元素,逻辑合法。

错误写法

while(nums[i%n] >= st.top() && !st.empty()) st.pop();

这里先执行nums[i%n] >= st.top():

  • 循环刚开始时栈st是空的,此时调用st.top()会直接触发运行时错误,程序崩溃。右边的!st.empty()根本没有执行机会,无法起到保护作用。

总结

在需要访问栈顶元素的场景下,必须先判断栈是否非空,再调用top()方法,利用逻辑与的短路求值特性,避免空栈访问的非法操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:53:00