第一章 栈和队列
1.3 如何仅用递归函数和栈操作逆序一个栈
【题目】
实现栈中元素的逆序,要求只能采用递归函数实现,不能用其它数据结构。
【难度】
尉 ★★☆☆
【题解】
本题考查栈的操作和递归函数的设计,为此需要设计两个递归函数。
- 递归函数一:将栈 stack 的栈底元素返回并移除;
- 递归函数二:逆序一个栈,即题目要求实现的方法。
【实现】
- ReverseAStack.java
import java.util.Stack;
public class ReverseAStack {
private ReverseAStack() {
}
public static void reverseAStack(Stack<Integer> stack) throws Exception {
if (stack == null) {
throw new RuntimeException("参数不合法");
}
reverse(stack);
}
private static void reverse(Stack<Integer> stack) {
if (stack.empty()) {
return;
}
int last = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(last);
}
private static int getAndRemoveLastElement(Stack<Integer> stack) {
int next = stack.pop();
if (stack.empty()) {
return next;
}
int last = getAndRemoveLastElement(stack);
stack.push(next);
return last;
}
}
- ReverseAStackTest.java
import java.util.Stack;
public class ReverseAStackTest {
public static void main(String[] args) throws Exception {
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
ReverseAStack.reverseAStack(stack);
}
}