用两个栈实现队列

此博客链接: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();
    }
}
原文地址:https://www.cnblogs.com/ping2yingshi/p/12796491.html