2016-09-02 2 views
2

링크 된 목록의 구조에서 한 가지를 이해하는 데 약간의 어려움이 있습니다. 기본적으로 연결된 클래스의 노드는 다음 클래스를 사용하여 만들고 다음 참조는 getNext() 메서드에서 가져옵니다. 내 문제와 관련이없는 다른 메서드는 생략했습니다.링크 된 목록 데이터 구조 이해

class Node: 
    def __init__(self,initdata): 
     self.data = initdata 
     self.next = None 

    def getNext(self): 
     return self.next 

는 이제 LinkedList의를 생성하고 LinkedList의 크기를 찾으려고 할 때 :

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

    def size(self): 
     current = self.head 
     count = 0 
     while current != None: 
      count = count + 1 
      current = current.getNext() <----- 

     return count 

내가 화살표로 표시된 라인을 이해하지 않습니다. 나는 다음 노드로 넘어가려고하는 논리를 알고 있지만 getNext()는 "NodeClass"의 메소드입니다. NodeClass 객체가 아닌 객체 (즉, 현재)에 의해 사용되는 방식 (getNext() 메소드)은 무엇입니까? 실제로 "UnorderedList"클래스의 객체입니다.

+0

이 코드의 출처는 어디입니까? –

+1

'current'는'Node' 인스턴스가 아니라고 어떻게 생각합니까? 'current = self.head'는'self.head'가 무엇이든간에'current'를 설정합니다. 'self.head'가'Node' 인스턴스 인 경우,'current'도 마찬가지입니다 –

+0

그러나 self.head가 Node 인스턴스 인 방법은 무엇입니까? UnorderedList 클래스 객체를 초기화하는 데 사용됩니다. –

답변

1

current은 기본적으로 UnOrderedList의 인스턴스이며 각 요소는 Node입니다. 따라서 Nodes에 적용된 방법은 current의 각 요소에 적용 할 수 있습니다. 노드는 add 메소드를 사용하여 UnOrderedList에 추가됩니다.

def add(self,item): 
    temp = Node(item) 
    temp.setNext(self.head) 
    self.head = temp 
+0

당신의 설명을 해주셔서 감사합니다. 그러나 제 문제는'current'가'getNext()'메소드를 호출 할 수있는 노드 여야한다는 것입니다. 나는'current' 값으로부터'node'를 만들 어딘가를 놓쳤다 고 생각합니다. –

+0

여기에'current = self.head'를 지정하면 현재 객체는 노드 –

+0

이됩니다. 그러나'node' 객체는 두 부분 만 포함합니다 :'self.data'와'self.next'! –