题目:用两个栈实现一个队列。队列声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
解题思想:假设有栈stack1和stack2,依次插入元素a、b、c,只需直接插入到stack1中;
要删除队列头部时,需要将a、b、c先弹出并依次存入stack2,再弹出stack2的尾结点a即可;
此时要插入元素d,仍然插入stack1;若要删除元素则stack2弹出,当stack2为空时将stack1的元素按上步思路依次弹出再存入stack2中。
综上,队列插入元素,直接将元素插入stack1;
队列删除元素,则从stack2弹出元素,如果stack2为空,则将stack1中的元素依次弹出并插入stack2中,然后再弹出栈顶元素。(stack2依次出栈元素顺序与删除队列头部的顺序一致,stack1则相反)。
java实现:
public class QueueWithTwoStacks {
private Stack<Integer> stack1=new Stack<Integer>();
private Stack<Integer> stack2=new Stack<Integer>();
//插入元素到队尾
public void appendTail(Integer a) {
stack1.push(a);
}
//队头弹出元素
public Integer deleteHead() {
if(stack2.isEmpty()) {
while(!stack1.isEmpty()) {//将stack1中的元素弹出并存入satck2
stack2.push(stack1.pop());
}
}
return stack2.pop();
}