用队列实现栈
🎯 问题描述(来源于LeetCode)
描述 :
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
示例 :
1 2 3 4 5 6 7 8 9 10 11 12 13 输入: ["MyStack", "push", "push", "top", "pop", "empty"] [[], [1], [2], [], [], []] 输出: [null, null, null, 2, 2, false] 解释: MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.top(); // 返回 2 myStack.pop(); // 返回 2 myStack.empty(); // 返回 False
💻 解题思路
思路1:q存储数据+p为辅助队列
思路1:代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import queueclass MyStack : def __init__ (self ): self .q=queue.Queue() self .p=queue.Queue() def push (self, x: int ) -> None : self .q.put(x) def pop (self ) -> int : while self .q.qsize()>1 : self .p.put(self .q.get()) a=self .q.get() while self .p.qsize()>0 : self .q.put(self .p.get()) return a def top (self ) -> int : while self .q.qsize()>1 : self .p.put(self .q.get()) a=self .q.get() while self .p.qsize()>0 : self .q.put(self .p.get()) self .q.put(a) return a def empty (self ) -> bool : return self .q.empty()
思路1:📊 性能分析
提交结果
击败100.00%
击败5.56%
复杂度验证
时间复杂度:O ( N ) O(N) O ( N )
空间复杂度:O ( N ) O(N) O ( N )
思考