点击查看: 《剑指offer-第2版》 全部面试题 详解目录(Java版)
用两个栈实现队列
题目: 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入节点和在队列头部删除节点的功能。
- 两个栈,存入数据时把数据全部压入第一个栈,然后把第一个栈中的数据弹出压入第二个栈中。
- 出队:即从第二个栈中弹出数据。
- 入队:即若第二个栈有数据,先将第二个栈的数据压入第一个栈,然后重复步骤一。
代码示例:
package ch02;
import java.util.Stack;
public class T09_用两个栈实现队列 {
Stack<Object> stack1 = new Stack();
Stack<Object> stack2 = new Stack();
/**
* 入队,将栈2中的数据 弹出存入栈1,然后向栈1添加数据
* @param o
*/
public void addQueue(Object o){
if(stack2==null){
stack1.add(o);
}else{
while (stack2!=null){
stack1.add(stack2.pop());
}
stack1.add(o);
}
}
/**
* 出队,从第二个栈中弹出数据
* @param o
* @return
*/
public Object exitQueue(Object o){
if(stack1==null){
return stack2.pop();
}else{
while (stack1!=null){
stack2.add(stack1.pop());
}
return stack2.pop();
}
}
}