剑指 Offer 09. 用两个栈实现队列

    技术2022-07-10  212

    题目链接:实现队列

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

    示例 1:

    输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1]

    太简单了,直接贴代码:

    class CQueue { //两个栈,一个出栈,一个入栈 Stack<Integer> s1; Stack<Integer> s2; public CQueue() { s1 = new Stack<>(); s2 = new Stack<>(); } public void appendTail(int value) { s1.push(value); } public int deleteHead() { if(!s2.isEmpty()){ return s2.pop(); }else{ while(!s1.isEmpty()){ s2.push(s1.pop()); } return s2.isEmpty() ? -1 : s2.pop(); } } }

    补充: 队列实现栈

    class MyStack { public: /** Initialize your data structure here. */ queue<int> q; MyStack() { } /** Push element x onto stack. */ void push(int x) { q.push(x); } /** Removes the element on top of the stack and returns that element. */ int pop() { int size = q.size()-1; for(int i=0;i<size;i++) { int data = q.front(); q.pop(); q.push(data); } int d = q.front(); q.pop(); return d; } /** Get the top element. */ int top() { int size = q.size()-1; for(int i=0;i<size;i++) { int data = q.front(); q.pop(); q.push(data); } int d = q.front(); q.pop(); q.push(d); return d; } /** Returns whether the stack is empty. */ bool empty() { if(!q.empty()){ return false; } else { return true; } } }; /** * Your MyStack object will be instantiated and called as such: * MyStack obj = new MyStack(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.top(); * bool param_4 = obj.empty(); */
    Processed: 0.009, SQL: 9