问题描述
用两个栈实现一个队列。队列声明如下,请山西爱你它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。若队列中没有元素,deleteHead操作返回-1。
思路
两个栈实现队列,stack1接收插入的元素,stack用于删除元素。
插入时,直接进stack1。删除时,直接删除stack2栈顶的元素,如果stack2为空,将stack1的元素全部转移到stack2中,如果stack2依然为空,则返回-1,否则返回栈顶元素。
代码
import java.util.Stack;
public class Main {
public static void main(String[] args) {
CQueue queue = new CQueue();
for (int i = 0; i < 5; i++) {
queue.appendTail(i);
}
for (int i = 0; i < 5; i++) {
System.out.println(queue.deleteHead());
}
}
}
class CQueue {
private Stack<Integer> stack1 = new Stack<>();
private Stack<Integer> stack2 = new Stack<>();
public CQueue() {
}
public void appendTail(int value) {
stack1.push(value);
}
public int deleteHead() {
if (!stack2.isEmpty()) {
return stack2.pop();
}
while(!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
if (stack2.isEmpty()) return -1;
return stack2.pop();
}
}