標籤:
Implement Stack using Queues
Implement the following operations of a stack using queues.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- empty() -- Return whether the stack is empty.
Notes:
- You must use only standard operations of a queue -- which means only
push to back, peek/pop from front, size, and is empty operations are valid.
- 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.
- You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
兩個棧實現隊列:
一個棧存放當前所有元素,另一個棧為空白。
push: 元素進非空棧,並更新top值為當前進隊元素。
pop: 將非空棧的值,除了最後一個(待出隊),其餘的裝入空棧。注意更新top值為最後第二個進隊元素。
top: 直接返回即時更新的top值
empty: 判斷兩個棧是否均為空白
class Stack {public: queue<int> q1; queue<int> q2; int n; // Push element x onto stack. void push(int x) { if(q2.empty()) q1.push(x); else q2.push(x); n = x; } // Removes the element on top of the stack. void pop() { if(!q1.empty()) { while(q1.size() > 1) { int front = q1.front(); if(q1.size() == 2) n = front; q1.pop(); q2.push(front); } q1.pop(); } else { while(q2.size() > 1) { int front = q2.front(); if(q2.size() == 2) n = front; q2.pop(); q1.push(front); } q2.pop(); } } // Get the top element. int top() { return n; } // Return whether the stack is empty. bool empty() { return q1.empty() && q2.empty(); }};
【LeetCode】225. Implement Stack using Queues