2017-10-20 10 views
0

Je crée une classe python pour implémenter une liste doublement chaînée. J'ai une classe séparée pour le noeud DLL lui-même et une classe pour la liste. Ce est ma classe pour les noeuds DLL: classe DLLNode:python liste doublement chaînée - insertAfter noeud

def __init__(self,element,nextnode=None,prevnode=None,): 

    self._element = element 
    self._next = nextnode 
    self._prev = prevnode 

J'ai une méthode appelée insertAfter(self,x,y) qui insère le noeud y après la première x occurence. Ce qui est ceci:

if self.size != 0: 
     n = DLLNode(y) 
     if self.head._element == x: 
      n._next = self.head._next 
      self.head._next._prev = n 
      n._prev = self.head 
      self.head._next = n 
      self.size += 1 

     elif self.tail._element == x: 
      self.tail._next = n 
      n._prev = self.tail 
      n._next = None 
      self.tail = n 
      self.size += 1 
     else: 
      iterator = self.head._next 
      while iterator._next is not None: 
       if iterator._element == x: 
        n._next = iterator._next 
        iterator._next._prev = n 
        n._prev = iterator 
        iterator._next = n 
        self.size += 1 
       else: 
        iterator = iterator._next 

quand je lance cette fonction cependant, la fonction boucle pour toujours, quand je tue la fonction moi-même, l'erreur renvoie à la 4ème dernière ligne iterator._next = n il ne dit pas autre chose qui est pourquoi im confus . vous serions reconnaissants de toute aide :)

Répondre

1

Dans la boucle

while iterator._next is not None: 

dans then branche que vous ne change pas de valeur iterator. A chaque itération, les deux conditions iterator._next is not None (à partir de la boucle while) et if iterator._element == x: sont True (car iterator contient la même valeur). Et vous obtenez la boucle de l'infini. Essayez d'ajouter break à la fin de la branche then.

+0

oh ça a du sens, merci! – DecafOyster208