2017-10-20 11 views
0

二重リンクリストを実装するPythonクラスを作成しています。私はDLLノード自体とリストのクラスのために別個のクラスを持っています。 これは、DLLノードのための私のクラスである: クラスDLLNode:Python二重リンクリスト - insertAfterノード

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

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

Iは、第一出現Xの後にノードyを挿入insertAfter(self,x,y)呼ばれるメソッドを有します。このどちらである:

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 

私はしかし、この機能を実行すると、私は機能を自分自身を殺したときに、関数は、永遠にループすることが、なぜイム混乱している何かを言うdoesntのiterator._next = n、エラーが戻って4番目の最後の行を指し、 。 が大幅にあなたがiterator値を変更しません

while iterator._next is not None: 

then枝にループで任意のヘルプ:)

答えて

1

をお願い申し上げます。すべての反復で、(whileループから)とif iterator._element == x:Trueです(iteratorには同じ値が含まれているため)。無限ループが起こります。 thenの末尾にbreakを追加してください。

+0

ありがとうございます。 – DecafOyster208

関連する問題