【数据结构和算法】使用两个栈实现队列

用两个栈实现队列

http://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6

做这题之前我们首先要明白一点就是,栈是先进后出的,队列是先进先出的。我们可以使用两个栈stackPop和stackPush,

1,往队列中添加元素的时候直接把要添加的值压入到stackPush栈中。

2,往队列中删除元素的时候如果stackPop中有元素我们就直接删除,如果没有元素,我们需要把stackPush中的元素全部出栈放到stackPop中,然后再删除stackPop中的元素。

这样做的目的我们就可以保证stackPop中的元素永远都是比stackPush中的元素更老。

public class Solution {
    Stack<integer> stack1 = new Stack<integer>();
    Stack<integer> stack2 = new Stack<integer>();

    public Solution() {
        stack1 = new Stack&lt;&gt;();
        stack2 = new Stack&lt;&gt;();
    }

    //入队的时候只把数据存储在stackPush中即可
    public void push(int node) {
        stack1.push(node);
    }

    //出队的时候如果stackPop为空,就把stackPush中的数据全部倒入
    //stackPop中
    public int peek() {
        if (stack2.isEmpty())
            while (!stack1.isEmpty())
                stack2.push(stack1.pop());
        return stack2.isEmpty() ? -1 : stack2.peek();
    }

    public int pop() {
        int res = peek();
        stack2.pop();
        return res;
    }

    public boolean empty() {
        return stack1.empty() &amp;&amp; stack2.empty();
    }
}

如果觉得有用就给个赞吧,还可以关注我的《牛客博客》查看更多的详细题解

数据结构和算法 文章被收录于专栏

专注于算法题的讲解,包含常见数据结构,排序,查找,动态规划,回溯算法,贪心算法,双指针,BFS和DFS等等。

全部评论
朋友!第26行的stack2.pop()是多余代码,应该去掉,不然会报错:java.util.EmptyStackException。
点赞 回复 分享
发布于 2021-10-03 11:56

相关推荐

01-14 16:23
广州商学院 Java
双非后端失败第N人:如果准备好了可以直接投字节,字节是最不看学历的,只要想面,大概率都能给你约面。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务