1classSolution:2def__init__(self, capacity):3 self.stk =[]4 self.capacity = capacity
56defpush(self, val):7iflen(self.stk)==0orlen(self.stk[-1])== self.capacity:8 self.stk.append([val])9return10 self.stk[-1].append(val)1112defpop(self):13iflen(self.stk)==0:returnNone14 res = self.stk[-1].pop()15iflen(self.stk[-1])==0: self.stk.pop()16return res
1718defpopAt(self, index):19iflen(self.stk)==0:returnNone20return self.leftShift(index,True)2122# rollover the bottom values from the next stacks onto the current stack's top at index where the top was popped23defleftShift(self, index, removeTop):24 stack = self.stk[index]25 removedItem =None26if removeTop: removedItem = stack.pop()27else: removedItem = self.removeBottom(index)2829iflen(self.stk[index])==0:del self.stk[index]30else:31 val = self.leftShift(index +1,False)32 self.stk[index].append(val)3334return removedItem
3536defremoveBottom(self, index):37return self.stk[index].pop(0)