剑指 Offer 09. 用两个栈实现队列

1. 题目

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

2. 示例1

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

3. 提示

  • 1 <= values <= 10000
  • 最多会对 appendTail、deleteHead 进行 10000 次调用

4. 题解

说实话,要想看懂和这个题目真难!
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
以上两个,第一个是具体操作,第二个是需要的参数。
CQueue:创建队列,此时不需要参数
appendTail:队尾新增元素,需要参数3
deleteHead: 删除对头元素,不需要参数
[null,null,3,-1],这个是返回值
CQueue: 创建队列,返回null
appendTail: 队尾新增元素3,返回null
deleteHead: 删除队头元素(3),返回3
deleteHead: 删除队头元素(此时为null),返回-1

5. 实现

 1 public class CQueue09 {
 2     // 两个栈,一个出栈,一个入栈
 3     private Stack<Integer> stackIn;
 4     private Stack<Integer> stackOut;
 5 
 6     public CQueue09 () {
 7         stackIn = new Stack<>();
 8         stackOut = new Stack<>();
 9     }
10 
11     public void appendTail(int value) {
12         stackIn.push(value);
13     }
14 
15     public int deleteHead() {
16         if(!stackOut.isEmpty()) {
17             return stackOut.pop();
18         } else {
19             while (!stackIn.isEmpty()) {
20                 stackOut.push(stackIn.pop());
21             }
22             return stackOut.isEmpty() ? -1 : stackOut.pop();
23         }
24     }
25 }

6. 结语

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

 

posted @ 2021-06-23 14:43  抚琴尘世客  阅读(32)  评论(0)    收藏  举报