(一)、题目
一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
(二)、题目描述
(三)、样例
(四)、备注
(五)、程序代码
import java.util.*;
public class Main {
//这个方法用于获取栈底元素
public Integer popStack(Stack<Integer> stack) {
//将当前栈的栈顶元素出栈
Integer result = stack.pop();
//判断是否已经是最后一个元素了
if(stack.isEmpty()) {
//返回栈底元素
return result;
}
//answer就是栈底元素
Integer answer = popStack(stack);
//将不是栈底元素的元素放回栈中
stack.push(result);
//返回栈底元素
return answer;
}
//实现逆序操作
public Stack<Integer> pushStack(Stack<Integer> stack) {
//查看栈是否已经空了
if(stack.isEmpty()) {
return stack;
}
//每次都返回当前栈中的栈底元素
Integer last = popStack(stack);
//递归调用
stack = pushStack(stack);
System.out.print(last+" ");
//将栈底元素放回栈中,实现逆序操作
stack.push(last);
return stack;
}
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
Main main = new Main();
Scanner reader = new Scanner(System.in);
Integer num = reader.nextInt();
for(int i = 0; i < num; i++) {
stack.push(reader.nextInt());
}
stack = main.pushStack(stack);
}
}
(六)、代码思路
这道题的思路是使用两个递归函数。第一个递归函数popStack()实现的是每次都将栈底元素移除,其他元素保持不变。第二个递归函数pushStack()实现的是运用递归,在递归中调用popStack()函数,依次从原来栈的栈顶开始获取元素,依次放进栈中,实现逆序操作。具体示意图如下。
- popStack()方法的示意图:
- pushStack()方法的示意图: