剑指Offer:用两个栈实现队列(Python语言实现)

用两个栈实现一个队列。队列的声明如下:
请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。

队列的特征是先进先出,而栈的特征是先进后出。那么可以设置stack1用来压入元素,而stack2用来弹出元素,其中有这样一个过程来保证规律性,即当stack2为空时将stack1中的元素逐个弹出并压入stack2

class Solution:
    def __init__(self):
        self._stack1 = None
        self._stack2 = None

    def push(self, node):
        if self._stack1 is None:
            self._stack1 = []
        self._stack1.append(node)

    def pop(self):
        if self._stack2 is None:
            self._stack2 = []
        if not self._stack2:
            if not self._stack1:
                return False
            while self._stack1:
                self._stack2.append(self._stack1.pop())
        return self._stack2.pop()
用两个队列实现一个栈。

要求恰恰相反。那么可以设置queue1用来压入和弹出元素,而queue2作为缓冲区保存queue1中的元素,核心在于当queue2为空时将queue1中的元素逐个弹出并压入queue2,直到queue1中只有一个元素,此时再从queue1中弹出最后一个元素作为返回值。

class Solution:
    def __init__(self):
        self._queue1 = None
        self._queue2 = None

    def push(self, node):
        if self._queue1 is None:
            self._queue1 = []
        if self._queue2 is None:
            self._queue2 = []

        if self._queue2:
            self._queue1.append(node)
        else:
            self._queue2.append(node)

    def pop(self):
        if not self._queue1 and not self._queue2:
            return False

        if self._queue2:
            self._queue1, self._queue2 = self._queue2, self._queue1

        while len(self._queue1) != 1:
            self._queue2.append(self._queue1.pop())
        return self._queue1.pop()

(最近更新:2019年09月20日)

你可能感兴趣的:(#,NOWCODER)