1.兩個棧實現一個隊列
兩個棧stack1和stack2, push的時候直接push進stack1,pop時需要判斷stack1和stack2中的情況。如果stack2不為空的話,直接從stack2中pop,如果stack2為空,把stack1中的值push到stack2中,然后再pop stack2中的值。
class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append(node) def pop(self): # return xx if len(self.stack1) == 0 and len(self.stack2) == 0: return elif len(self.stack2) == 0: while len(self.stack1) > 0: self.stack2.append(self.stack1.pop()) return self.stack2.pop()
2.兩個隊列實現一個棧
進棧:元素入隊列A
出棧:判斷如果隊列A只有一個元素,則直接出隊。否則,把隊A中的元素出隊並入隊B,直到隊A中只有一個元素,再直接出隊。為了下一次繼續操作,互換隊A和隊B。
class Stock: def __init__(self): self.queueA=[] self.queueB=[] def push(self, node): self.queueA.append(node) def pop(self): if len(self.queueA)==0: return None while len(self.queueA)!=1: self.queueB.append(self.queueA.pop(0)) self.queueA,self.queueB=self.queueB,self.queueA #交換是為了下一次的pop return self.queueB.pop()