题目:
Implement the following operations of a queue using stacks.
- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
Notes:
- You must use only standard operations of a stack -- which means only
push to top
,peek/pop from top
,size
, andis empty
operations are valid. - Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
- You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
题意及分析:使用stack实现queue的功能。这里对于queue的push和enpty操作来说,和stack一样就行。对于pop和peek,由于stack是pop和peek都是从队尾来讲,然而queue是要的这两个操作时对于队首的元素来讲。所以这里需要使用另一个stack来讲当前stack倒序添加进新stack,对于最后一个元素 取值或者去掉,然后在将新stack倒序回去即可。具体看代码:
代码:
public class MyQueue { Stack<Integer> stack; /** Initialize your data structure here. */ public MyQueue() { stack = new Stack<>(); } /** Push element x to the back of queue. */ public void push(int x) { stack.push(x); } /** Removes the element from in front of queue and returns that element. */ public int pop() { Stack<Integer> tempStack=new Stack<>(); int lenght=stack.size(); for(int i=0;i<lenght-1;i++){ tempStack.push(stack.peek()); stack.pop(); } int res=stack.peek(); stack.pop(); int tempSize=tempStack.size(); for(int i=0;i<tempSize;i++){ stack.push(tempStack.peek()); tempStack.pop(); } return res; } /** Get the front element. */ public int peek() { Stack<Integer> tempStack=new Stack<>(); int lenght=stack.size(); for(int i=0;i<lenght-1;i++){ tempStack.push(stack.peek()); stack.pop(); } int res=stack.peek(); stack.pop(); tempStack.push(res); int tempSize=tempStack.size(); for(int i=0;i<tempSize;i++){ stack.push(tempStack.peek()); tempStack.pop(); } return res; } /** Returns whether the queue is empty. */ public boolean empty() { return stack.isEmpty(); } } /** * Your MyQueue object will be instantiated and called as such: * MyQueue obj = new MyQueue(); * obj.push(x); * int param_2 = obj.pop(); * int param_3 = obj.peek(); * boolean param_4 = obj.empty(); */