007 用递归函数和栈逆序一个栈
Table of Contents

ac

import org.omg.CORBA.INTERNAL;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {
        int n = sc.nextInt();
        Stack<Integer> sta = new Stack<>();
        for(int i=0;i<n;i++){
            int val = sc.nextInt();
            sta.push(val);
        }
        reverse(sta);
        print(sta);
    }

    static void print(Stack<Integer> sta){
        List<Integer> rs = new ArrayList<>();
        rs.addAll(sta);
        for(int i=0;i<rs.size();i++){
            System.out.print(rs.get(i) + " ");
        }
//        System.out.println();
    }

    static void reverse(Stack<Integer> sta){
        if(sta.isEmpty()){
            return;
        }
        int i = getAndRemoveLast(sta); // 把栈底取出来, 逆序完剩余的栈,再push栈底
        reverse(sta);
        sta.push(i);
    }

    static int getAndRemoveLast(Stack<Integer> sta){
        int topVal = sta.pop();
        // 只有一个元素就return,否则一直递归
        if(sta.isEmpty()){
            return topVal;
        }else {
            // 递归处理
            int last = getAndRemoveLast(sta);
            sta.push(topVal);
            return last;
        }
    }

}
/*
5
1 2 3 4 5

5 4 3 2 1
 */