def _append(self,x): """appends x onto end of the list post: x is appended onto the end of the list""" newNode=DListNode(x) #General Case (not empty) if self.head is not None: node=self.tail newNode.link = node.link node.link=newNode newNode.rev=node #Empty MEthod else: self.head=newNode self.tail=newNode self.size+=1
def insert(self,index,value): ''' pre: 0<=index<self.size, value should be an integer or a float or a string post: insert a new node whose value is value at the position index in the list Exception: IndexError if pre violated ''' #IndexError if Pre Violated if not (0 <= abs(index) <= self.size): raise IndexError #Convert the index to the positive version if index < 0: index = self.size+index #If the index is the last position # apply append directly if index == self.size: self._append(value) return #Other Cases newNode = DListNode(value) #when index is the 0, first position if index == 0: node = self._find(0) newNode.link = self.head self.head = newNode node.rev = newNode #general case else: node = self._find(index) prev = node.rev newNode.link = prev.link prev.link = newNode newNode.rev = prev node.rev = newNode self.size += 1