Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9caebf

Browse files
committed
两个栈实现队列
1 parent baa8805 commit a9caebf

File tree

1 file changed

+67
-0
lines changed
  • app/src/main/java/com/zhxh/codeproj/leetcode/offer75

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.zhxh.codeproj.leetcode.offer75;
2+
3+
import java.util.ArrayDeque;
4+
import java.util.Deque;
5+
6+
/*
7+
剑指 Offer 09. 用两个栈实现队列
8+
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
9+
10+
示例 1:
11+
12+
输入:
13+
["CQueue","appendTail","deleteHead","deleteHead"]
14+
[[],[3],[],[]]
15+
输出:[null,null,3,-1]
16+
示例 2:
17+
18+
输入:
19+
["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
20+
[[],[],[5],[2],[],[]]
21+
输出:[null,-1,null,null,5,2]
22+
提示:
23+
24+
1 <= values <= 10000
25+
最多会对 appendTail、deleteHead 进行 10000 次调用
26+
*/
27+
public class Offer09 {
28+
public static void main(String[] args) {
29+
CQueue obj = new CQueue();
30+
obj.appendTail(1);
31+
obj.appendTail(2);
32+
obj.deleteHead();
33+
}
34+
35+
/*
36+
将一个栈当作输入栈,用于压入appendTail传入的数据;
37+
另一个栈当作输出栈,用于deleteHead操作。
38+
每次deleteHead时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,
39+
这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序
40+
*/
41+
static class CQueue {
42+
Deque<Integer> inStack;
43+
Deque<Integer> outStack;
44+
45+
public CQueue() {
46+
inStack = new ArrayDeque<Integer>();
47+
outStack = new ArrayDeque<Integer>();
48+
}
49+
50+
public void appendTail(int value) {
51+
inStack.push(value);
52+
}
53+
54+
public int deleteHead() {
55+
if (outStack.isEmpty()) {
56+
if (inStack.isEmpty()) {
57+
return -1;
58+
}
59+
//倒腾一下
60+
while (!inStack.isEmpty()) {
61+
outStack.push(inStack.pop());
62+
}
63+
}
64+
return outStack.pop();
65+
}
66+
}
67+
}

0 commit comments

Comments
 (0)