欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【左神算法】栈逆序

程序员文章站 2022-06-03 15:58:22
...

1.问题

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

2.code

【左神算法】栈逆序

package com.ncst.offer.ch1.offer.ch2;

/**
 * @author i
 * @create 2020/7/20 18:16
 * @Description
 */
public class StackReverse {

    public void reverse(Stack<Integer> stack){
        //如果栈为null 退出
        if (stack.isEmpty()){
            return;
        }
        //将栈底元素拿到
        int i = removeLastElement(stack);
        reverse(stack);
        //存储当前层的i值
        stack.push(i);
    }

    public int removeLastElement(Stack<Integer> stack){
        int res = stack.pop();
        if (stack.isEmpty()){
            return res;
        }else {
            //返回的是递归函数的栈底的值
            int last = removeLastElement(stack);
            //存储当前层的res值
            stack.push(res);
            return last;
        }
    }


    public static void main(String[] args) {
        StackReverse stackReverse = new StackReverse();
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stackReverse.reverse2(stack);

        while (!stack.isEmpty()){
            System.out.println(stack.pop());
        }
    }

}