您的位置:首页 > 职场人生

程序员代码面试指南--如何仅用递归函数和栈操作逆序一个栈

2018-02-06 17:05 756 查看
/**
如何仅用递归函数和栈操作逆序一个栈
【题目】

一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、
3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就
是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数
据结构。
*/
import java.util.Stack;
public class C03_ReverseStackUsingRecursive {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
while(!stack.empty()){
System.out.println(stack.pop());//6 5 4 3 2 1
}
System.out.println("---------------");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
reverse(stack);
while(!stack.empty()){
System.out.println(stack.pop());//1 2 3 4 5 6
}
}
public static void reverse(Stack<Integer> stack){
if(stack.empty()){//鸿沟
return ;
}
int i = getAntRemoveLastElement(stack);//获得并移除栈底元素
reverse(stack);//递推
stack.push(i);
}
private static int getAntRemoveLastElement(Stack<Integer> stack) {
int res = stack.pop();//reverse函数决定了stack一定至少有一个元素
if(stack.empty()){
return res;//如果移除后栈为空证明这就是栈底元素了
}else {
//否则进行递归
int last = getAntRemoveLastElement(stack);
stack.push(res);
return last;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: