Loading

逆置栈中的内容

问题:
给定一个栈,逆置栈中的内容,要求只能只用栈操作push和pop,不能用数组、栈、队列等做过渡。

基本思路:
用递归,先将原来栈中的元素递归出栈,直至栈为空,然后在每次递归向上步骤时,将上一步中出栈的元素插入栈底,具体代码如下:

import java.util.Stack;

public class ReverseStack {
    /*
     * 给定一个栈,将其中的内容逆置
     * 要求:
     *      1.只能使用栈操作push和pop
     *      2.不能使用其他的类似于数组、栈、队列等做过渡
     */

    public static void main(String[] args) {
        Stack<Integer> st = new Stack<>();
        st.push(1);
        st.push(2);
        st.push(3);
        st.push(4);
        System.out.println("反转前: " +st.toString());
        reverseStack(st);
        System.out.println("反转后:" + st.toString());

    }

    public static<T> void reverseStack(Stack<T> stack){
        if(stack.isEmpty())
            return;
        T temp = stack.pop();
        reverseStack(stack); // 将原栈中的元素递归出栈
        insertAtButtom(stack,temp); // 将出栈的元素插入栈底
    }
    public static<T> void insertAtButtom(Stack<T> stack, T data){
        if(stack.isEmpty()){
            stack.push(data); // 栈为空后将该元素插入栈底
            return;
        }
        T temp = stack.pop();
        insertAtButtom(stack,data); // 将栈中的元素递归出来直至栈为空
        stack.push(temp); // 将开始递归出的元素依次入栈
    }

}

结果:
这里写图片描述

posted @ 2017-09-11 16:41  leon_x  阅读(88)  评论(0)    收藏  举报