美文网首页java实现-剑指offer
java实现-剑指offer-面试题7:用两个栈实现队列

java实现-剑指offer-面试题7:用两个栈实现队列

作者: 栗栗栗 | 来源:发表于2016-07-05 22:36 被阅读0次

    题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。

    思路:

    栈的特点是后进先出,队列的特点是先进先出。

    对于队列的插入功能,栈的压栈操作即可模拟。所以重点在于怎样用栈来模拟队列的删除元素操作,即保证先进入队列的元素先删除。

    最直观的办法,就是用stack1来添加元素,需要删除元素的时候,将stack1的元素都弹出,依次压入stack2,这样再从stack2弹出,顺序就如同队列一样是先进先出了。

    需要考虑的关键点就在于,当stack2不为空时,删除操作直接从stack2弹出元素即可;当stack2为空时,需要判断stack1里是否有元素,有的话则先把stack1的元素全部压入stack2才可以继续进行弹出操作。

    以下面为例:

    添加元素:1 2 3  -- stack1元素从栈顶开始为3 2 1,stack2为空

    删除元素:1 2  --将stack1元素全部弹出压入stack2,stack1为空,stack2从栈顶开始元素为1 2 3,弹出1 2,剩下元素3

    添加元素:4 5  --stack1依次压入4 5,且只含这两个元素,stack2还是3

     删除元素:3 4 --先查看stack2不为空,弹出元素3,然后判断stack1不为空,将元素弹出压入stack2,再弹出4即可,此时stack1为空,stack2剩下元素5

    最后的代码如下

    相关文章

      网友评论

        本文标题:java实现-剑指offer-面试题7:用两个栈实现队列

        本文链接:https://www.haomeiwen.com/subject/vdgyrttx.html