[剑指Offer]-用两个栈实现队列
题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能
解题思路
- 当stack2不为空时,直接弹栈。当stack2为空得时候,将stack1中得剩余元素压入stack2。循环往复。
算法图解
参考代码:
package offer;
import java.util.Stack;
/**
* 用两个栈实现一个队列。队列的声明如下,
* 请实现它的两个函数appendTail和deleteHead,
* 分别完成在队列尾部插入结点和在队列头部删除结点的功能
*/
public class Offer9 {
static Stack<String> stack1 = new Stack<String>();
static Stack<String> stack2 = new Stack<String>();
public static void main(String[] args) {
Offer9.appendTail("xl");
for (int i = 1; i <= 10; i++) {
appendTail(i + "");
}
System.out.println(Offer9.deleteHead());
}
public static void appendTail(String string) {
stack1.push(string);
}
public static String deleteHead() {
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
附录
该题源码在我的 ????Github 上面!