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);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/quxiangxiangtiange/p/10135356.html