class Solution { // 熟悉 栈和队列的概念和性质 // 常用的操作 public: void push(int node) { stack1.push(node); // 就直接进入第一个栈 } int pop() { if(!stack2.empty()) // 若第二个栈非空 就弹出 返回 { int ans = stack2.top(); stack2.pop(); return ans; } else // 否则 先把栈1插入的 转移到栈2 这样保证了顺序反过来 变成队列的先入先出 { while(!stack1.empty()) { int tmp = stack1.top(); stack2.push(tmp); stack1.pop(); } int ans = stack2.top(); stack2.pop(); return ans; } } private: stack<int> stack1; stack<int> stack2; };
这样 pop 的时间复杂度是O(N) 那这和题意里 全是O(1)相悖啊? 官解就是这样