美文网首页
offer09用两个栈实现队列python

offer09用两个栈实现队列python

作者: D_w | 来源:发表于2020-02-29 15:33 被阅读0次

用两个栈来实现一个队列,完成队列的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();
    }
}

相关文章

网友评论

      本文标题:offer09用两个栈实现队列python

      本文链接:https://www.haomeiwen.com/subject/dtwphhtx.html