zoukankan      html  css  js  c++  java
  • 剑指offer——用两个栈实现队列

    题目描述

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    题目分析

    栈:后进先出(LIFO-last in first out)

    队列:先进先出(FIFO-first in first out)

    解题思路

    假设两个栈为栈A和栈B

    入栈时直接压入栈A

    出栈时,如果栈B为空,则把栈A中所有元素压入栈B,然后弹出栈B的栈顶元素

                  如果栈B不为空,则直接弹出栈B的栈顶元素

    最终代码

    所用时间和内存:18ms,9308k

    import java.util.Stack;
    
    public class Solution {
        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 = new Stack<Integer>();
        
        public void push(int node) {
            stack1.push(node);
        }
        
        public int pop() {
            if(stack1.empty()&&stack2.empty()){
                throw new RuntimeException("Quene is empty");
            }
            if(stack2.empty()){
                while(!stack1.empty()){
                    stack2.push(stack1.pop());
                }
            }
            return stack2.pop();
        }
    }

    Tips:

    java中stack有的方法:

    • E push(E item)

      将item压入栈并返回item

    • E pop()

      弹出并返回栈顶的item。如果栈为空,请不要调用这个方法。

    • E peek()

      返回栈顶元素,但不弹出。如果栈为空,请不要调用这个方法。

  • 相关阅读:
    人月神话阅读笔记01
    个人每日总结14
    个人每日总结13
    个人每日总结12
    个人每日总结11
    个人每日总结10
    个人每日总结9
    第五周学习进度表
    梦断代码阅读笔记
    05构建之法阅读笔记之五
  • 原文地址:https://www.cnblogs.com/mgblog/p/10967532.html
Copyright © 2011-2022 走看看