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

【题目】
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是说实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
【思路】
需要使用两个递归函数,第一个递归函数用于获取栈底元素,并删除栈底元素,第二个递归函数用于在获取完栈底元素至栈空,并开始压入元素入栈。
【图示】
《Coding Interview Guide · 栈和队列》阅读笔记(三)
《Coding Interview Guide · 栈和队列》阅读笔记(三)

package com.javaman.chap1;

import java.util.Stack;

/**
 * Created by zhahongsheng on 2019/4/2.
 */
public class Mystack3 {

    public static int  getAndRemoveLastElement(Stack<Integer> stack){
        int result = stack.pop();
        if(stack.empty()){
            return result;
        }else{
            int last = getAndRemoveLastElement(stack);
            stack.push(result);
            return last;
        }
    }

    public static void reverse(Stack<Integer> stack){
        if(stack.empty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        stack.push(i);
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        for(int i = 1; i <= 5; ++i){
            stack.push(i);
        }
        reverse(stack);
        while (!stack.empty()){
            System.out.println(stack.pop());
        }
    }
}

阅读总结
主要考察递归函数用于中间数据存储,以及递归的原理及运行过程。

相关文章:

  • 2021-10-07
  • 2021-05-15
  • 2021-05-17
  • 2021-05-03
  • 2022-12-23
  • 2021-08-08
  • 2021-11-17
猜你喜欢
  • 2022-03-09
  • 2022-02-20
  • 2022-01-29
  • 2021-07-14
  • 2021-08-13
  • 2021-11-30
  • 2021-12-02
相关资源
相似解决方案