解题思路:
栈无法实现队列功能:栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。
双栈可实现列表倒序:设有含三个元素的栈A=[1,2,3]和空栈B=[]。若循环执行A元素出栈并添加入栈B,直到栈A为空,则A=[],B=[3, 2, 1],即栈B实现栈A元素倒序。
利用栈B删除队首元素:倒序后,B执行出栈相当于删除了A的栈底元素,即对应队首元素
函数设计:
题目要求实现加入队尾appendTail()和删除队首deleteHead()两个函数的正常工作,因此我们可以设计栈A用于加入队尾操作,栈B用于将元素倒序,从而实现删除队首元素。
加入队尾appendTail()函数:将数字val加入栈A即可
删除队首deleteHead()函数,有以下三种情况:
case1:当栈B不为空
即B中仍有已完成倒序的元素,因此直接返回B的栈顶元素。
case2:当栈B为空
若A为空:即两个栈都为空,此时没有元素,返回-1
若A不为空:将栈A元素全部转移至栈B中,实现元素倒序,并返回栈B的栈顶元素
代码:
#coding:utf-8
# 用两个栈实现队列
class Solution:
def __init__(self):
self.A, self.B = [],[]
def appendTail(self, value):
"""
:param value: int
:return: None
"""
self.A.append(value)
def deleteHead(self):
"""
:return: int
"""
if self.B:
return self.B.pop()
if not self.A:
return -1
while self.A:
self.B.append(self.A.pop())
return self.B.pop()
Reference