• LeetCode_225. Implement Stack using Queues


    225. Implement Stack using Queues

    Easy

    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 backpeek/pop from frontsize, 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).
    package leetcode.easy;
    
    public class ImplementStackUsingQueues {
    	@org.junit.Test
    	public void test1() {
    		MyStack1 stack = new MyStack1();
    
    		stack.push(1);
    		stack.push(2);
    		System.out.println(stack.top()); // returns 2
    		System.out.println(stack.pop()); // returns 2
    		System.out.println(stack.empty()); // returns false
    	}
    
    	@org.junit.Test
    	public void test2() {
    		MyStack2 stack = new MyStack2();
    
    		stack.push(1);
    		stack.push(2);
    		System.out.println(stack.top()); // returns 2
    		System.out.println(stack.pop()); // returns 2
    		System.out.println(stack.empty()); // returns false
    	}
    
    	@org.junit.Test
    	public void test3() {
    		MyStack3 stack = new MyStack3();
    
    		stack.push(1);
    		stack.push(2);
    		System.out.println(stack.top()); // returns 2
    		System.out.println(stack.pop()); // returns 2
    		System.out.println(stack.empty()); // returns false
    	}
    }
    
    class MyStack1 {
    	private java.util.Queue<Integer> q1 = new java.util.LinkedList<>();
    	private java.util.Queue<Integer> q2 = new java.util.LinkedList<>();
    	private int top;
    
    	/** Initialize your data structure here. */
    	public MyStack1() {
    
    	}
    
    	// Push element x onto stack.
    	public void push(int x) {
    		q1.add(x);
    		top = x;
    	}
    
    	// Removes the element on top of the stack.
    	public int pop() {
    		while (q1.size() > 1) {
    			top = q1.remove();
    			q2.add(top);
    		}
    		int tempPop = q1.remove();
    		java.util.Queue<Integer> temp = q1;
    		q1 = q2;
    		q2 = temp;
    		return tempPop;
    	}
    
    	/** Get the top element. */
    	public int top() {
    		return top;
    	}
    
    	/** Returns whether the stack is empty. */
    	public boolean empty() {
    		return q1.isEmpty();
    	}
    }
    
    class MyStack2 {
    	private java.util.Queue<Integer> q1 = new java.util.LinkedList<>();
    	private java.util.Queue<Integer> q2 = new java.util.LinkedList<>();
    	private int top;
    
    	/** Initialize your data structure here. */
    	public MyStack2() {
    
    	}
    
    	/** Push element x onto stack. */
    	public void push(int x) {
    		q2.add(x);
    		top = x;
    		while (!q1.isEmpty()) {
    			q2.add(q1.remove());
    		}
    		java.util.Queue<Integer> temp = q1;
    		q1 = q2;
    		q2 = temp;
    	}
    
    	// Removes the element on top of the stack.
    	public int pop() {
    		int temp = q1.remove();
    		if (!q1.isEmpty()) {
    			top = q1.peek();
    		}
    		return temp;
    	}
    
    	// Get the top element.
    	public int top() {
    		return top;
    	}
    
    	// Return whether the stack is empty.
    	public boolean empty() {
    		return q1.isEmpty();
    	}
    }
    
    class MyStack3 {
    	private java.util.Queue<Integer> q1 = new java.util.LinkedList<>();
    	private int top;
    
    	/** Initialize your data structure here. */
    	public MyStack3() {
    
    	}
    
    	// Push element x onto stack.
    	public void push(int x) {
    		q1.add(x);
    		int sz = q1.size();
    		while (sz > 1) {
    			q1.add(q1.remove());
    			sz--;
    		}
    		top = x;
    	}
    
    	// Removes the element on top of the stack.
    	public int pop() {
    		int temp = q1.remove();
    		if (!q1.isEmpty()) {
    			top = q1.peek();
    		}
    		return temp;
    	}
    
    	// Get the top element.
    	public int top() {
    		return top;
    	}
    
    	// Return whether the stack is empty.
    	public boolean empty() {
    		return q1.isEmpty();
    	}
    }
    
    /**
     * Your MyStack object will be instantiated and called as such: MyStack obj =
     * new MyStack(); obj.push(x); int param_2 = obj.pop(); int param_3 = obj.top();
     * boolean param_4 = obj.empty();
     */
    
  • 相关阅读:
    HttpClient
    充值保存
    button 样式
    创建窗口
    第十一次作业
    第十次作业
    第九次作业
    第八次作业
    第七次作业
    第六次作业
  • 原文地址:https://www.cnblogs.com/denggelin/p/11733014.html
Copyright © 2020-2023  润新知