3.不借助其他的数据结构,通过递归函数来逆序一个栈
分析:不借助其他数据结构来逆序一个栈,即空间复杂度要求最低,往往是通过牺牲时间复杂度来实现的,这个时候我们往往要向递归上考虑,这个地方需要两个递归函数,一个递归函数获取栈底元素,一个递归函数实现栈的逆序。
思路:获取栈底元素的递归函数:定义两个变量last、previous,last存储“栈底”元素,previous存储”栈底”元素的上一个元素,先将栈弹出一个元素赋给previous,此时判读栈是否为空,如果为空则previous即为栈底元素,如果栈非空则递归调用函数获取栈底元素赋给last,然后将previous变量值压入栈中。实现栈逆序的递归函数:先判断栈是否为空,如果为空则无需逆序程序直接结束,否则获取栈底元素,然后将移除栈底元素的栈逆序(递归调用自己),最后再将获取的栈底元素入栈。
附上Java实现代码:
public class ReverseStack{ /*** * 获取并删除栈底元素 * @param stack * @return 栈底元素 */ public Integer getAndRemovedLastElement(Stack<Integer> stack){ Integer previous=stack.pop();//previous存放栈底元素的上一个元素 Integer last=null;//last存放栈底元素 if(stack.isEmpty()){ return previous; }else{ last=getAndRemovedLastElement(stack); stack.push(previous); } return last; } /** * 给栈逆序 * @param stack */ public void reverseStack(Stack<Integer> stack){ if(stack.isEmpty()){ return ; }else{ Integer last=getAndRemovedLastElement(stack); reverseStack(stack); stack.push(last); } } }