2017-10-16 1 views
4

나는 링크드리스트를 파이썬으로 배우려고한다. 나는 Linked List 클래스를 받았고 추가 메소드를 만들 것을 요청 받았다.Python - Linked List - Append

다음은 제공된 코드입니다.

class Node: 
    def __init__(self, item, next): 
     self.item = item 
     self.next = next 

class LinkedList: 
    def __init__(self): 
     self.head = None 

    def add(self, item): 
     self.head = Node(item, self.head) 

    def remove(self): 
     if self.is_empty(): 
      return None 
     else: 
      item = self.head.item 
      self.head = self.head.next 
      return item 

    def is_empty(self): 
     return self.head == None 

    def __str__(self): 
     tmp_str = "" 
     ptr = self.head 
     while ptr != None: 
      tmp_str += ptr.item + " " 
      ptr = ptr.next 

     return tmp_str 

여기 내 추가 방법이 있지만 문제가 있습니다. 연결된 목록이 비어 있으면 하나를 만들어야한다는 것을 알고 있습니다. 내부에 요소가 있으면 문제가 시작됩니다.

def append(self, item): 
    ptr = self.head 
    if ptr: 
     while ptr != None: 
      ptr = ptr.next 
     ptr = Node(item, ptr) 
    else: 
     self.head = Node(item, self.head) 

누구나 내가 뭘 잘못 말했는지 알 수 있습니까? 어떤 도움이라도 대단히 감사합니다.

+0

'ptr'이 아닌 경우 (즉, 목록이 비어 있지 않은 경우) 목록에서 마지막 노드를 찾으면 'last.next = Node (item, None)' –

+2

용어집 :'append'는 클래스가 아니며,'LinkedList' 클래스의 함수, 메소드 *입니다. –

+1

@ juanpa.arrivillaga 고마워. 고치다. –

답변

3

두 가지 확인 - 먼저 self.head이 초기화되었는지 확인합니다. 두 번째 노드는 마지막 노드를 찾을 때까지 목록을 탐색해야합니다. 경계를 초과하지 않도록하십시오. 그렇지 않으면 마지막 노드를 새 노드 마지막 노드에 연결할 수 없습니다.

def append(self, item): 
    if not self.head: 
     self.head = Node(item, self.head) 
    else: 
     ptr = self.head 
     while ptr.next:     # traverse until ptr.next is None 
      ptr = ptr.next 
     ptr.next = Node(item, ptr.next) # initialise ptr.next 
+0

고마워. 내 코드가 너무 복잡해? –

+2

@OmOWalker 꽤 많이 있습니다. 'ptr'가 None이고 point가'ptr' 인 지점으로 가면 꼬리의 다음 속성을 재 지정한다는 의미는 아닙니다! 나는 너를 위해 물건을 깨끗이하기를 바란다. –

+2

예, 계속 연습 할 것입니다. D. 당신에게 표를 던졌지 만, 저에 대해 작은 평판을 가지고 있다고 말합니다. –