offer09用两个栈实现队列python
2020-02-29 本文已影响0人
D_w
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路,栈是先入后出,队列是先入先出,一个in栈用作进行入栈(push)操作,一个out栈用作进行出栈(pop)操作,入栈时元素进入in栈,在需要出栈时顺序相反,若出栈时栈内为空就返回-1,否则需要将in栈元素弹出再放入out栈中,入out栈和出in栈的顺序相反,这样从out栈出的顺序就与进入in栈的顺序一致。
python实现
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.in_stack = []
self.out_stack = []
def push(self, node):
# write code here
self.in_stack.append(node)
def pop(self):
if len(self.out_stack) == 0:
while self.in_stack:
self.out_stack.append(self.in_stack.pop()) # 这里的pop不是上面定义的pop函数,list.pop()用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
if len(self.out_stack) == 0: # 这里其实得满足in和out都为空时返回-1,只是上一个判断中有in的判断,判断到这里in栈肯定已空
return -1
return self.out_stack.pop()
java写法这里java的判断优化了下,python也可以这么写
class CQueue {
LinkedList<Integer>in_stack,out_stack;
public CQueue() {
in_stack = new LinkedList<Integer>();
out_stack = new LinkedList<Integer>();
}
public void appendTail(int value) {
in_stack.addLast(value);
}
public int deleteHead() {
if (!out_stack.isEmpty()) return out_stack.removeLast();
if (in_stack.isEmpty()) return -1;
while (!in_stack.isEmpty()){
out_stack.addLast(in_stack.removeLast());
}
return out_stack.removeLast();
}
}