题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:栈是先进后出,队列是先进先出。将栈A作为入队列,栈B作为出队列。
- 栈A用来作入队列
- 栈B用来出队列,当栈B为空时,栈A全部出栈(将元素入栈的顺序翻转了)到栈B,栈B再出栈(即出队列,顺序就变成了先进先出了)
class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append(node) def pop(self): # 栈1负责存储数据,栈2负责弹出数据,每次弹出后,栈2要将数据返还给栈1,所以栈2肯定为空,栈1不为空 if len(self.stack2) != 0 or len(self.stack1) == 0: return -1 else: # 将栈1数据压到栈2 while len(self.stack1) >= 1: self.stack2.append(self.stack1.pop()) # 待返回数据 res = self.stack2.pop() # 将栈2剩余数据返还给栈1 while len(self.stack2): self.stack1.append(self.stack2.pop()) return res # 测试代码 if __name__ == '__main__': s = Solution() s.push(1) s.push(2) s.push(3) print(s.pop()) s.push(4) print(s.pop())