• LeetCode232 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 emptyoperations 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).

    解题:

    用栈实现队列,这个比用队列实现栈要麻烦一些,这里用到两个栈,两种思路。第一种就是在进栈的时候,把栈逆序放在另外一个栈,出的时候直接出另外一个栈就能够了。另外一种思路。进栈的时候不做不论什么处理。出栈的时候把栈逆序放在另外一个栈。出另外一个栈。以下就是两种的代码实现。

    在进栈的时候进行处理:

    class MyQueue {
        // Push element x to the back of queue.
    	Stack<Integer> stack=new Stack<>();
    	Stack<Integer> stack2=new Stack<>();
    	
        public void push(int x) {
        	while(!stack.isEmpty())
        	{
        		stack2.push(stack.pop());
        	}
        	stack2.push(x);
        	while(!stack2.isEmpty())
        	{
        		stack.push(stack2.pop());
        	}
            
        }
    
        // Removes the element from in front of queue.
        public void pop() {
            stack.pop();
        }
    
        // Get the front element.
        public int peek() {
            return stack.peek();
        }
    
        // Return whether the queue is empty.
        public boolean empty() {
            return stack.isEmpty();
        }
    }
    在出栈的时候进行处理:

    class MyQueue2 {
        // Push element x to the back of queue.
    	Stack<Integer> stack=new Stack<>();
    	Stack<Integer> stack2=new Stack<>();
    	
        public void push(int x) {
        	while(!stack2.isEmpty())
        		stack.push(stack2.pop());
        	stack.push(x);
            
        }
    
        // Removes the element from in front of queue.
        public void pop() {
        	
        	while(!stack.isEmpty())
        		stack2.push(stack.pop());
            stack2.pop();
          
        }
    
        // Get the front element.
        public int peek() {
        	while(!stack.isEmpty())
        		stack2.push(stack.pop());
            return stack2.peek();
          
        }
    
        // Return whether the queue is empty.
        public boolean empty() {
        	while(!stack2.isEmpty())
        		stack.push(stack2.pop());
            return stack.isEmpty();
        }
    }



  • 相关阅读:
    centos8 将SSSD配置为使用LDAP并要求TLS身份验证
    Centos8 搭建 kafka2.8 .net5 简单使用kafka
    .net core 3.1 ActionFilter 拦截器 偶然 OnActionExecuting 中HttpContext.Session.Id 为空字符串 的问题
    Springboot根据不同环境加载对应的配置
    VMware Workstation12 安装 Centos8.3
    .net core json配置文件小结
    springboot mybatisplus createtime和updatetime自动填充
    .net core autofac依赖注入简洁版
    .Net Core 使用 redis 存储 session
    .Net Core 接入 RocketMQ
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7159431.html
Copyright © 2020-2023  润新知