之前面试一直不刷题,因为感觉工作中用不到,为了卷而卷,这是有点知名度的力扣面试题,学撤销重做的时候想起,之前的面试中被问过两三次了,紧张了,几分钟都构思不到, 有点兴趣还是记录一下。
队列实现栈 题目使用队列实现栈的下列操作:
push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空
思路我们用两个队列A、B来模拟栈,这里将A看作是栈,B看作是实现栈操作所需的临时队列。
-
入栈:直接将元素添加进队列
-
出栈:将A队列中队尾元素以外的都挪到B队列中,使得栈顶元素能够被取出。然后再将A的末尾元素"出栈"。 然后,将AB的引用交换, 这样A更新之后的内容看起来就像出栈。
-
返回栈顶元素:和出栈同理,只是在返回A的末尾元素后, A的末尾元素也得进入B队列。
-
判断栈是否为空:如果AB同时为空,则为空栈。
用栈来实现队列需要使用两个栈:一个栈用于入列操作,另一个栈用于出列操作。具体实现如下:
入列操作:将元素压入栈1中。
出列操作:如果栈2不为空,则弹出栈顶元素;如果栈2为空,则将栈1中的元素逐个弹出并压入栈2中,然后弹出栈2的栈顶元素。
判断队列是否为空:当栈1和栈2都为空时,队列为空。
因为保证出栈的顺序与入栈相同就行了,而将一个栈的元素挨个移动到另个栈,然后另个栈出栈的顺序就能保证与第一个栈的入栈顺序相同了。