剑指offer──用两个栈实现队列

题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
在这里插入图片描述
队列:先进先出
:先进后出

思路:
1.stack1负责入队,stack2负责出队
2.如果stack1和stack2都为空,则抛出异常
3.如果stack2为空,则把satck1的元素都pop掉,并且push到stack2
4.此时stack2不为空,直接出队,返回pop值

代码:

public class Solution {

    //stack1实现入队
    Stack<Integer> stack1 = new Stack<Integer>();
    //stack2实现出队
    Stack<Integer> stack2 = new Stack<Integer>();

    public void push(int node) {
        stack1.add(node); //直接入队
    }

    public int pop() {

        //1.如果stack1和stack2都为空,则抛出异常
        if(stack1.empty() && stack2.empty()){
            throw new RuntimeException("Queue is empty");
        }

        //2.如果stack2为空,则把satck1的元素都pop掉,并且push到stack2
        if(stack2.empty()) {
            while (!(stack1.empty())) {
                stack2.push(stack1.pop());
            }
        }

        //3.此时stack2不为空,直接出队,返回pop值
        return stack2.pop();

    }
}
发布了49 篇原创文章 · 获赞 3 · 访问量 2316

猜你喜欢

转载自blog.csdn.net/xiao_count/article/details/102794321
今日推荐