用递归来反转栈
最开始的想法是一个递归函数解决,然后仔细想想不行
解法:
一个递归函数返回栈的栈底元素并将之移除
另一个递归函数进行递归压入得到的数据
代码:
/** * By returnZhang * 递归翻转栈 */ public class Reverse { private Stack<Integer> stack; /** * 构造函数 */ public Reverse(){ stack=new Stack<>(); } //压入函数 public void push(Integer num){ stack.push(num); } public Integer pop(){ return stack.pop(); } /** * 得到栈底值并移除 * * @return */ private Integer getLastValue(){ //获取当前栈顶值 int value=stack.pop(); //终结条件 if(stack.isEmpty()){ return value; }else{ //递归 int last=getLastValue(); //重新压入数值 stack.push(value); return last; } } //通过递归重新把栈底值反转压入 public void reverseStack(){ //递归终结条件 if(stack.isEmpty()){ return; } int last=getLastValue();//通过递归函数获取栈底值 reverseStack();//递归操作 stack.push(last);//一层一层压入值 } public boolean isEmpty(){ return stack.isEmpty(); } }
本文介绍了一种使用递归方法来实现栈的翻转过程。通过定义两个递归函数,一个用于获取并移除栈底元素,另一个则用于将这些元素以相反顺序重新压入栈中,从而达到翻转的效果。
346

被折叠的 条评论
为什么被折叠?



