[LeetCode] Implement Stack using Queues

Implement the following operations of a stack using queues.

Notes:

You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue – which means only push to back, pop from front, size, and is empty operations are valid.解题思路

使用两个队列q1和q2,,在q1上进行top()和push()操作,每次操作前把所有元素集中到q1中。

实现代码// Runtime: 0 ms 暂时理解为计时故障class Stack {public:// Push element x onto stack.void push(int x) {gather(q1, q2);q1.push(x);}// Removes the element on top of the stack.void pop() {gather(q1, q2);while (q1.size() > 0 && q1.size() != 1){q2.push(q1.front());q1.pop();}q1.pop();}// Get the top element.int top() {gather(q1, q2);while (q1.size() > 0 && q1.size() != 1){q2.push(q1.front());q1.pop();}int n = q1.front();q2.push(q1.front());q1.pop();return n;}// Return whether the stack is empty.bool empty() {return q1.empty() && q2.empty();}private:queue<int> q1;queue<int> q2;void gather(queue<int>& q1, queue<int>& q2){while (!q2.empty()){q1.push(q2.front());q2.pop();}}};

由于每次push()、top()或者pop()之后都有一个队列为空,因此直接将q1设为有元素的队列即可。可以省去出入队列的时间。

// Runtime: 0 msclass Stack {public:// Push element x onto stack.void push(int x) {toQ1(q1, q2);q1.push(x);}// Removes the element on top of the stack.void pop() {toQ1(q1, q2);while (q1.size() > 0 && q1.size() != 1){q2.push(q1.front());q1.pop();}q1.pop();}// Get the top element.int top() {toQ1(q1, q2);while (q1.size() > 0 && q1.size() != 1){q2.push(q1.front());q1.pop();}int n = q1.front();q2.push(q1.front());q1.pop();return n;}// Return whether the stack is empty.bool empty() {return q1.empty() && q2.empty();}private:queue<int> q1;queue<int> q2;void toQ1(queue<int>& q1, queue<int>& q2){if (q1.empty()){q1 = q2;queue<int> q;q2 = q;}}};

穷则思变,差则思勤!没有比人更高的山没有比脚更长的路。

[LeetCode] Implement Stack using Queues

相关文章:

你感兴趣的文章:

标签云: