• 用两个栈实现队列


    此博客链接:https://www.cnblogs.com/ping2yingshi/p/12796491.html

    用两个栈实现队列()

    题目链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/

    用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

    示例 1:

    输入:
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    输出:[null,null,3,-1]
    示例 2:

    输入:
    ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
    [[],[],[5],[2],[],[]]
    输出:[null,-1,null,null,5,2]

    题解:

             题意:实现两个函数appendTail 和 deleteHead,在尾部插入,在头删除。给的示例,上面给的是操作,下面是操作后实现了什么。

           例如例1:输入了CQueue创建了一个队列,然后输入appendTail",在队列中添加了一个3,deleteHead删除3后,队列里为空。

             思路:

                      1.建立两个栈。

                       2.用一个栈添加元素。

                       3.用一个栈来删除元素,注意这里是在头部删除节点,而元素入栈时,会把头部元素放到栈底,所以需要利用另外一个栈,把当前添加元素的栈元素出栈stack1,重新入栈到stack2中,然后取stack2的栈顶元素即为栈顶元素。

    代码如下:

    class CQueue {
        public Stack<Integer> stack1;
        public Stack<Integer> stack2;
    
        public CQueue() {
            stack1=new Stack<Integer>();
            stack2=new Stack<Integer>();
        }
        
        public void appendTail(int value) {
           stack1.push(value);
        }
        
        public int deleteHead() {
          if(stack2.size()<=0)
          {
              if(stack1.size()<=0){
                  return -1;
              }
              for(int i=stack1.size();i>0;i--)
              {
                  stack2.push(stack1.pop());
              }
          }
          return stack2.pop();
        }
    }
  • 相关阅读:
    oracle执行.sql文件
    rematch的基本用法
    dva的基本用法
    redux-saga基本用法
    react-redux的基本用法
    redux的基本概念
    mobx基本概念
    centos 编译安装Apache 2.4
    javascript动态添加一组input
    php配置文件语法
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12796491.html
Copyright © 2020-2023  润新知