剑指 Offer 09. 用两个栈实现队列

Easy

思路

以上,尝试写一下代码,AC!

代码

python3

class CQueue:

    def __init__(self):
      self.putStack = []
      self.getStack = []

    def appendTail(self, value: int) -> None:
      if len(self.getStack) != 0:
        while len(self.getStack):
          self.putStack.append(self.getStack[-1])
          self.getStack.pop()
      self.putStack.append(value)

    def deleteHead(self) -> int:
      if len(self.getStack) == 0:
        if len(self.putStack) == 0:
          return -1
        while len(self.putStack):
          self.getStack.append(self.putStack[-1])
          self.putStack.pop()
      head = self.getStack[-1]      
      self.getStack.pop()
      return head

优化

上面的代码每次要新增的时候都倒回原来的杯子,再添加,但是我们可以不用倒回去。

新增的就直接往杯子1里面加,需要取的时候再倒到要取的杯子里就行了

尝试优化一下代码,AC!

代码

python3

class CQueue:

    def __init__(self):
      self.putStack = []
      self.getStack = []

    def appendTail(self, value: int) -> None:
      self.putStack.append(value)

    def deleteHead(self) -> int:
      if len(self.getStack):
        return self.getStack.pop()
      if not len(self.putStack):
        return -1
      while len(putStack):
        self.getStack.append(self.putStack.pop())
      return self.getStack.pop()