2017-10-20 6 views
0

이중 연결리스트를 구현하기위한 파이썬 클래스 생성. DLL 자체에 대한 별도의 클래스와 목록에 대한 클래스가 있습니다. 이 내 클래스는 DLL 노드를위한 것입니다 클래스 DLLNode :파이썬 이중 연결리스트 - insertAfter 노드

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

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

내가 선두로부터의 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 

이 함수 영원히 루프, 오류가 말을 나던 4 마지막 줄 iterator._next = n로 다시 말한다 이유 메신저 혼란 아무것도 . 크게 당신이 iterator 값을 변경하지 않습니다

while iterator._next is not None: 

then 지점에서 루프에서 도움 :

답변

1

감사하겠습니다. 매 반복마다 iterator._next is not None (while 루프에서) 및 if iterator._element == x:True (iterator에 동일한 값이 포함되어 있기 때문에)입니다. 무한 루프가 발생합니다. then 브랜치 끝에 break을 추가하십시오.

+0

감사합니다. – DecafOyster208