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