题目
将一个栈逆序,但是不能申请额外的数据结构(如数组等)
- 利用递归栈保存信息的特点,递归进数组最后一项然后返回
- 递归传入的栈,每次递归过程调用上述方法,当栈为空时,将递归栈保存的弹出值添加进栈中,完成逆序
function reverseStack(stack) {
if (!stack.length) {
return;
}
// 利用递归栈保存每次弹出的值
let last = getLast(stack);
reverseStack(stack);
// 当栈空掉后,往前回溯才会执行push
stack.push(last);
}
// 获取栈中最后一位,然后还原剩余数组
function getLast(stack) {
let end = stack.pop();
if (!stack.length) {
return end;
}
// 获取弹出的最后一位
let last = getLast(stack);
// 利用递归栈还原除最后一位数组
stack.push(end);
// 返回最后一位
return last;
}
let stack = [1, 2, 3];
reverseStack(stack);
console.log(stack);