题目说明:
一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
输入描述:
输入数据第一行一个整数N为栈中元素的个数。
接下来一行N个整数表示从栈顶依次到栈底的每个元素。
输出描述:
输出一行表示栈中元素逆序后的每个元素
备注:1<=N<=1000000,-1000000<=<=1000000
示例1:
输入
5
1 2 3 4 5
输出
5 4 3 2 1
Java代码:
import java.util.Scanner;
import java.util.Stack;
public class Three{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = Integer.valueOf(sc.nextLine());
Stack<Integer> s = new Stack<>();
String[] arr = sc.nextLine().split(" ");
for(int i=arr.length-1; i>=0; i--)
s.push(Integer.valueOf(arr[i]));
Reverse(s);
while(!s.isEmpty()){
System.out.print(s.pop()+" ");
}
}
//将取出的元素入栈: 先取出后入栈
public static void Reverse(Stack<Integer> s){
//base case
if(s.isEmpty())
return;
int curr = stackLastElement(s);
Reverse(s);
s.push(curr);
}
//取出栈s的最后一个元素,其余元素不动
public static int stackLastElement(Stack<Integer> s){
if(s.size()==1)
return s.pop();
int curr = s.pop();
int last = stackLastElement(s);
s.push(curr);
return last;
}
}
运行结果: