算法-07用递归函数和栈逆序一个栈

描述

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

输入描述:

输入数据第一行一个整数N为栈中元素的个数。

接下来一行N个整数X_iXi表示一个栈依次压入的每个元素。

输出描述:

输出一行表示栈中元素逆序后的栈顶到栈底的每个元素

示例1

输入:
5
1 2 3 4 5

输出:
1 2 3 4 5

思路

需要设计俩个递归函数,

1)递归函数一,将stack的栈底元素返回并删除;

2)递归函数二,逆序一个栈;

 

 

import java.util.Stack;
import java.util.Scanner;

public class Main{
    
    // 将stack的栈底元素移除并返回
    public static int getAndRemoveLastElement(Stack<Integer> stack){
        int result = stack.pop();
        if(stack.isEmpty()){
            return result;
        }else{
            int last = getAndRemoveLastElement(stack);
            stack.push(result);
            return last;
        }
    }
    //逆序一个栈
    public static void reverse(Stack<Integer> stack){
        if(stack.isEmpty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        stack.push(i);
    }
    
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=0;i<n;i++){
            stack.push(scanner.nextInt());
        }
        reverse(stack);
        while(!stack.isEmpty()){
            System.out.print(stack.pop() + " ");
        }
        
    }
}

 

posted @ 2022-01-10 14:00  思凡念真  阅读(68)  评论(0编辑  收藏  举报