public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
return;
}
// 递归栈能保存信息这个机制用到了很好,就是问系统栈怎么逆序
int i = f(stack);
reverse(stack);
stack.push(i);
}
// 栈底元素移除掉
// 上面的元素盖下来
// 返回移除掉的栈底元素
// 例如 栈底 3 2 1 栈头 ,f(r=1,last=3) f(r=2,last=3) f(r=3,null),最后把res返回上面,上面再返回last,自己的压回去
// 获得栈低元素
public static int f(Stack<Integer> stack) {
int result = stack.pop();
if (stack.isEmpty()) {
return result;
} else {
int last = f(stack);// 递归调用 f(1) f(2) f(3)的时候栈空返回 last,last=3; 1 2 重新压回去
stack.push(result);
return last;
}
}