问题:
给定一个栈,逆置栈中的内容,要求只能只用栈操作push和pop,不能用数组、栈、队列等做过渡。
基本思路:
用递归,先将原来栈中的元素递归出栈,直至栈为空,然后在每次递归向上步骤时,将上一步中出栈的元素插入栈底,具体代码如下:
import java.util.Stack;
public class ReverseStack {
/*
* 给定一个栈,将其中的内容逆置
* 要求:
* 1.只能使用栈操作push和pop
* 2.不能使用其他的类似于数组、栈、队列等做过渡
*/
public static void main(String[] args) {
Stack<Integer> st = new Stack<>();
st.push(1);
st.push(2);
st.push(3);
st.push(4);
System.out.println("反转前: " +st.toString());
reverseStack(st);
System.out.println("反转后:" + st.toString());
}
public static<T> void reverseStack(Stack<T> stack){
if(stack.isEmpty())
return;
T temp = stack.pop();
reverseStack(stack); // 将原栈中的元素递归出栈
insertAtButtom(stack,temp); // 将出栈的元素插入栈底
}
public static<T> void insertAtButtom(Stack<T> stack, T data){
if(stack.isEmpty()){
stack.push(data); // 栈为空后将该元素插入栈底
return;
}
T temp = stack.pop();
insertAtButtom(stack,data); // 将栈中的元素递归出来直至栈为空
stack.push(temp); // 将开始递归出的元素依次入栈
}
}
结果: