要求
一个栈依次压入1,2,3,4,5,将其reverse操作,栈内变成5,4,3,2,1,不借助其他数据结构。
解法
依次取得栈底元素,然后依次入栈。
每次取完栈底元素,要保证其余元素的顺序不变。
第一个递归函数
取得栈底元素并移除,执行过程如下图:

虚线框为递归调用中栈和变量的变化情况,最右侧箭头为递归返回后的执行情况。
实现代码
//返回栈底元素并移除
public static Integer getAndRemoveLastElement(Stack<Integer> stack) {
Integer result = stack.pop();
if (stack.isEmpty()) {
return result;
}
Integer last = getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
第二个递归函数
依次取栈中底部的元素,然后逐一push
public static void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
return;
}
Integer last = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(last);
}