如何仅仅用递归函数和栈操作逆序一个栈

2018-12-15  本文已影响0人  一念叩心

题目描述

一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构

问题解答

其实刚开始遇到这个问题时,我也是不知道该怎么做。但是,仔细思考后,其实发现要想实现这个过程,要经过两步。只要将这两步考虑清楚后,就会知道接下来该怎么做。
第一步 将栈底元素取出
第二步 将取出的元素依靠递归来逆序压入栈中
第一步,其实也是要递归才能实现。而这两步实现的过程,很容易联想到树的遍历。

代码

import java.util.Stack;

public class ReverseStack {
    private Stack<Integer> stack;

    public ReverseStack(){
        stack = new Stack<>();
    }

    public int getlast(){
        int last = stack.pop();
        if (stack.isEmpty())
            return last;
        int result = getlast();
        stack.push(last);
        return result;
    }

    public void reverse(){
        if (stack.isEmpty()){
            return;
        }
        int begin = getlast();
        reverse();
        stack.push(begin);
    }

    public static void main(String[] args){
        ReverseStack reverseStack = new ReverseStack();
        reverseStack.stack.push(1);
        reverseStack.stack.push(2);
        reverseStack.stack.push(3);
        while (!reverseStack.stack.isEmpty()){
            System.out.println(reverseStack.stack.pop());
        }
        reverseStack.stack.push(1);
        reverseStack.stack.push(2);
        reverseStack.stack.push(3);
        reverseStack.reverse();
        while (!reverseStack.stack.isEmpty()){
            System.out.println(reverseStack.stack.pop());
        }

    }
}
上一篇下一篇

猜你喜欢

热点阅读