标签:
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.
就是两个queues, 轮流把除最后一个之外的都放入另一个queue中.
1 class MyStack { 2 // Push element x onto stack. 3 Queue<Integer> q1; 4 Queue<Integer> q2; 5 6 public MyStack() { 7 q1 = new LinkedList<Integer>(); 8 q2 = new LinkedList<Integer>(); 9 } 10 11 public void push(int x) { 12 q1.offer(x); 13 } 14 15 // Removes the element on top of the stack. 16 public void pop() { 17 if (q1.isEmpty()) return; 18 while (q1.size() > 1) { 19 q2.offer(q1.poll()); 20 } 21 q1.poll(); 22 q1 = q2; 23 q2 = new LinkedList<Integer>(); 24 } 25 26 // Get the top element. 27 public int top() { 28 if (q1.isEmpty()) return -1; 29 while (q1.size() > 1) { 30 q2.offer(q1.poll()); 31 } 32 int res = q1.poll(); 33 q1 = q2; 34 q1.offer(res); 35 q2 = new LinkedList<Integer>(); 36 return res; 37 } 38 39 // Return whether the stack is empty. 40 public boolean empty() { 41 return q1.isEmpty(); 42 } 43 }
Leetcode: Implement Stack using Queues
标签:
原文地址:http://www.cnblogs.com/EdwardLiu/p/5058559.html