2017-10-20 92 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 

我有一個名爲insertAfter(self,x,y)方法,該方法第一次出現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 

然而,當我運行此函數,該函數循環永遠,當我自己殺的功能,錯誤是指追溯到4最後一行iterator._next = n它不說別的這就是爲什麼即時通訊困惑。 將不勝感激任何幫助:)

回答

1

在循環中then分支

while iterator._next is not None: 

你不改變iterator值。在每次迭代中,條件iterator._next is not None(來自while循環)和if iterator._element == x:都是True(因爲iterator包含相同的值)。你會得到無限循環。嘗試在then分支的末尾添加break

+0

哦,這很有道理謝謝你! – DecafOyster208