[LeetCode] 232. Implement Queue using Stacks Java

题目:

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 toppeek/pop from topsize, and is 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();
 */

 

  

 

posted @ 2017-06-16 21:16  荒野第一快递员  阅读(442)  评论(0编辑  收藏  举报