本题考查栈的操作和递归的设计。
我们需要设计出两个函数:
①将Stack栈底元素移除并返回
②逆序一个栈
package stack;
import java.util.Stack;
public class RecurrenceStack {
public static int getAndRemoveLastElement(Stack<Integer> stack) {
int result = stack.pop();
if(stack.isEmpty()) {
return result;
}else {
int last = getAndRemoveLastElement(stack);
stack.push(result);
return last;
}
}
public static void reverse(Stack<Integer> stack) {
if(stack.isEmpty()) {
return;
}
int i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
}
//测试
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
reverse(stack);
System.out.print(stack.pop()+",");
System.out.print(stack.pop()+",");
System.out.print(stack.pop()+",");
System.out.print(stack.pop()+",");
}
}
参考文献:《程序员代码面试指南》—-左程云