[LeetCode] 225. Implement Stack using Queues_Easy tag: Design
2018-08-18 05:30 Johnson_强生仔仔 阅读(303) 评论(0) 编辑 收藏 举报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.
Example:
MyStack stack = new MyStack(); stack.push(1); stack.push(2); stack.top(); // returns 2 stack.pop(); // returns 2 stack.empty(); // returns false
Notes:
- You must use only standard operations of a queue -- which means only
push to back
,peek/pop from front
,size
, andis 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).
利用如下图所示的方式, 每次push的时候将queue里面的值都放到x的后面即可.
Push: O(n), others : O(1)
Code
class MyStack(object): def __init__(self): """ Initialize your data structure here. """ self.q = collections.deque() def push(self, x): """ Push element x onto stack. :type x: int :rtype: void """ size = len(self.q) self.q.append(x) while size: self.q.append(self.q.popleft()) size -= 1 def pop(self): """ Removes the element on top of the stack and returns that element. :rtype: int """ return self.q.popleft() def top(self): """ Get the top element. :rtype: int """ return self.q[0] def empty(self): """ Returns whether the stack is empty. :rtype: bool """ return not self.q # Your MyStack object will be instantiated and called as such: # obj = MyStack() # obj.push(x) # param_2 = obj.pop() # param_3 = obj.top() # param_4 = obj.empty()