zoukankan      html  css  js  c++  java
  • 暴力递归-逆序栈

    题目:给你一个栈,请你逆序这个栈 

    package Algorithms.ViolenceRecursive;
    
    import java.util.Stack;
    
    public class ReverseStackUsingRecursive {
    
        //逆序栈
        public static void reverse(Stack<Integer> stack) {
            if (stack.isEmpty()) {
                return;
            }
            int i = getAndRemoveLastElement(stack);
            reverse(stack);
            stack.push(i);
        }
    
        //移除栈底元素并返回
        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 main(String[] args) {
            Stack<Integer> test = new Stack<Integer>();
            test.push(1);
            test.push(2);
            test.push(3);
            test.push(4);
            test.push(5);
            reverse(test);
            while (!test.isEmpty()) {
                System.out.println(test.pop());
            }
    
        }
    
    }

    过程解析:

        public static int getAndRemoveLastElement(Stack<Integer> stack) { // 1 2 3
            int result = stack.pop(); //(1)弹1
            if (stack.isEmpty()) {
                return result;
            } else {
                int last = getAndRemoveLastElement(stack);
                {
                    int result = stack.pop(); //(2) 弹2
                    if (stack.isEmpty()) {
                        return result;
                    } else {
                        int last = getAndRemoveLastElement(stack);
                        {
                            int result = stack.pop(); //(3) 弹3
                            if (stack.isEmpty()) { 
                                return result; //(4)返回3
                            } else {
                                int last = getAndRemoveLastElement(stack);
                                stack.push(result);
                                return last;
                            }
                        }
                        stack.push(result); //(5) 压2
                        return last; //(6) 返回3
                    }
                }
                stack.push(result);  //(7)压1
                return last; (8)//返回3
            }
        }

     逆序栈:

        public static void reverse(Stack<Integer> stack) { //1 2 3
            if (stack.isEmpty()) {
                return;
            }
            int i = getAndRemoveLastElement(stack); // (1)i = 3  栈中剩余:1 2
            reverse(stack);
            {
                if (stack.isEmpty()) {
                    return;
                }
                int i = getAndRemoveLastElement(stack); //(2)i = 2  栈中剩余:1 
                reverse(stack);
                {
                    if (stack.isEmpty()) {
                        return;
                    }
                    int i = getAndRemoveLastElement(stack);//(3) i = 1  栈空
                    reverse(stack); // (4)栈空,递归结束
                    stack.push(i); //(5)压1
                }
                stack.push(i); //(6)压2
            }
            stack.push(i); //(7)压3
        }
  • 相关阅读:
    python 利用正则表达的式提取特定数据如手机号
    python 横向比较最大值 贴标签
    Go语言基础之17--Redis基本操作
    Mysql5.7.20源码编译安装
    Go语言基础之16--Mysql基本操作
    Go语言学习包(1)之bufio包
    Go语言基础之15--文件基本操作
    Go语言基础练习题系列5
    Go语言基础之14--Waitgroup和原子操作
    Go语言基础之13--线程安全及互斥锁和读写锁
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/15147194.html
Copyright © 2011-2022 走看看