JavaScript栈isEmpty()算法实现求助:无法正确判断空栈
栈isEmpty()算法实现问题
需求说明
需要实现栈的isEmpty()函数,满足以下要求:
- 栈为空时返回
true,包含元素时返回false - 执行后不能改变栈的原有状态
- 仅允许使用栈的
.pop()、.push()、.peek()三个方法
用户尝试了以下代码,但无法正确识别空栈:
function isEmpty(stack) { if(stack!==''){ return false }else if(stack===''){ return true } }
原代码问题分析
原代码错误地将栈对象与空字符串直接比较,栈是一个数据结构对象而非字符串,这种判断逻辑完全不符合栈的实际工作机制,因此无法正确判断栈是否为空。
正确实现方案
方案1:使用pop()+push()(兼容性更强)
这种方法通过临时取出栈顶元素,判断后再放回,确保栈的状态完全不变:
function isEmpty(stack) { const topElement = stack.pop(); // 若取出的是undefined,说明栈为空 if (topElement === undefined) { return true; } // 将元素放回栈,恢复原状态 stack.push(topElement); return false; }
方案2:使用peek()(简洁但需注意栈实现特性)
如果你的栈实现中,空栈调用.peek()会返回undefined而非抛出异常,可以直接用这个方法:
function isEmpty(stack) { return stack.peek() === undefined; }
注意事项
- 若栈的实现规定空栈调用
.peek()会抛出错误,优先选择方案1,避免异常。 - 两种方案都严格保证了栈的原有状态不被修改,符合需求。
内容的提问来源于stack exchange,提问作者ketchupenjoyer
相关产品推荐
相关产品推荐

