用两个栈实现队列

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 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]
提示:

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

 

解答:

栈:先进后出;队列:先进先出;用栈来实现队列,可以用一个栈专门存储数据,只是在出队的时候利用另一个栈来实现先进先出的特性。

 1 class CQueue {
 2 
 3 
 4     public CQueue() {
 5 
 6     }
 7     
 8     private Stack<Integer> stack1 = new Stack<>();
 9 
10     private Stack<Integer> stack2 = new Stack<>();
11 
12     public void appendTail(int value) {
13         stack1.add(value);
14     }
15 
16     public int deleteHead() {
17         if(stack1.isEmpty()){
18             return -1;
19         }
20         while (!stack1.isEmpty()) {
21             stack2.add(stack1.pop());
22         }
23         int pop = stack2.pop();
24         while (!stack2.isEmpty()) {
25             stack1.add(stack2.pop());
26         }
27         return pop;
28     }
29 }

 

posted @ 2020-04-17 12:22  heaven夏  阅读(115)  评论(0编辑  收藏  举报