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

核心思想是用第二个栈把栈元素倒序一遍就是队列的顺序,出栈中如果没有元素就从入栈往里加,有就直接出。

  • C+的stack的pop是没有返回值的,要先存一下top;C#的stack要new。
//C++
class CQueue {
public:
    stack<int> stin;
    stack<int> stout;
    CQueue() {

    }

    void appendTail(int value) {
        stin.push(value);
    }

    int deleteHead() {
        if (stout.empty()) {
            if (stin.empty()) return -1;
            while (!stin.empty()) {
                stout.push(stin.top());
                stin.pop();
            }
        }
        int res = stout.top();
        stout.pop();
        return res;

    }
};
//C#
public class CQueue {
    Stack<int> stIn = new Stack<int>();
    Stack<int> stOut = new Stack<int>();
    public CQueue() {

    }

    public void AppendTail(int value) {
        stIn.Push(value);
    }

    public int DeleteHead() {
        if (stOut.Count == 0) {
            if (stIn.Count == 0)
                return -1;
            while (stIn.Count != 0) {
                stOut.Push(stIn.Pop());
            }
        }
        return stOut.Pop();
    }
}