面试题7:用两个栈实现队列

来源:互联网 发布:阿里巴巴北京总部 知乎 编辑:程序博客网 时间:2024/06/05 10:06

题目:用两个栈实现一个队列。队列声明如下,请实现它的两个函数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中的元素弹出并存入satck2stack2.push(stack1.pop());}}return stack2.pop();}

原创粉丝点击