解析:用两个栈去实现队列,一个栈用于插入元素,另一个栈用于删除元素;如果想要删除队头元素,必须先将第一个栈的元素全部弹出,然后弹入到第二个栈中,然后在第二个栈弹出,实现删除元素。队列的类如下:
代码:
package com.likou;
import java.util.Stack;
/**
* 用两个栈来实现队列
* 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,
* 分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
*考虑用双栈去实现队列,一个只做插入,一个只做删除
*/
public class CQueue {
Stack<Integer> stack1;
Stack<Integer> stack2;
public CQueue() {
stack1 = new Stack<>();
stack2 = new Stack<>();
}
// 添加元素,规定在stack1中插入元素 在尾部添加元素
public void appendTail(int value) {
stack1.push(value);
}
// 删除 队头
public int deleteHead() {
if (stack2.isEmpty()){
while (!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
if (stack2.isEmpty()){
return -1;
}else {
int deleteNum = stack2.pop();
return deleteNum;
}
}
}