1 题目连接
2 题目描述
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )。
输入:
["CQueue","appendTail","deleteHead","deleteHead"] [[],[3],[],[]]
输出:
[null,null,3,-1]
理解题意:
1 首先看见这道题的时候,我以为我是个傻子,竟然没有看懂题,这是个什么东西,脑子里面就是无数个问号以及口吐芬芳。
2 去看评论,第一条就是这个,2677个赞,足以说明问题,兄弟们放心,这个赞还会再增加的。
3 理解题意:深呼一口气,此处省略一些字,我们还是用正常人类语言来解析一下题意吧,毕竟还是要解决掉它。
简单来说: 1)用2个栈实现队列的 appendTail()
和deleteHead()
函数
评论中有非常棒的理解,深得我心❤️❤️❤️ 例如:
4 解题思路
😁1)首先栈是无法实现队列功能的,栈是先进后出,无法直接删除栈底元素。看下图,自己画让大家见笑了,A只能忍着,也得等B、C出来之后,才能出栈。
🤔2)还是要用栈实现,一个不行,那我们就用两个栈,例如A栈依次出栈后,再放到B栈中,那就把原A栈的顺序给调换了,一句话概括:B为A的倒序。
🤔3)那删除呢?直接删除栈B中的栈顶元素啊,是否理解了呢?没有理解的话,随时交流😺
5 函数解析
appendTail()
:将参数直接加入到栈A中
deleteHead()
:如果A、B都为空,直接返回-1即可;如果A不为空,B为空,把A中循环倒序结束后,删除B中栈顶元素。
6、代码呈上
7、欢迎随时沟通啊