2016-07-08 2 views
2

링크 된 나는 몇 가지 문제가 있어요 코드입니다 :파이썬은 다음 목록 쿼리를

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

class Solution(object): 
    def insert(self, head, data): 
     if head == None: 
      head = Node(data) 
     else: 
      current = head 
      while current.next: 
       current = current.next 
      current.next = Node(data) 
     return head 

    def display(self, head): 
     current = head 
     while current: 
      print(current.data) 
      current = current.next 

코드 자체는 잘 작동하지만 문제가 삽입 기능을 이해하는 데 문제가 있습니다. 처음에는

Head == None 

이렇게 새 노드가 인수 데이터로 만들어 지므로 지금부터 새로운 머리가됩니다. 나는이 목록에 새 노드를 추가하려고하면 그래서, 다른 트리거되고 새 노드 :

current.next 

가 생성됩니다. 여태까지는 그런대로 잘됐다. 이제 또 다른 노드를 추가하고 싶다면 else 조건이 다시 트리거되지만 새로운 현재 오브젝트가 생성됩니다. 이렇게하면 이전 현재와 current.next의 메모리를 덮어 쓰지 않을까요? 프로그램은 어떻게 이전 노드의 메모리를 가질 수 있습니까 ??

너보다.

+0

개체를 이름에 바인딩하는 것은 * 참조를 값별로 전달하는 것과 같습니다. 새로운 객체는 생성되지 않고 기존 객체에 대한 새로운 참조 만 생성됩니다. 'current = current.next'는 *'* current.next'를 복사하지 않고'current.next'에 의해 참조 된 객체를 단지'current'에 의해 참조되도록 할당합니다. – MisterMiyagi

+0

나는 다른 대답 중 하나를 최고의 대답으로 선택해야했지만 귀하의 의견은 나를 가장 잘 이해하는 데 도움이되었습니다. @MisterMiyagi – MathsIsHard

답변

1

현재 로컬 변수는 이고 노드 개체에는입니다. 현재를 덮어 쓰더라도 노드가 파괴되지 않고 현재 점을 다른 점으로 만듭니다. 현재 사용하고있는 것이 무엇인지에 대한 참조가있는 한 괜찮습니다. 이 경우 의 머리를으로 유지하기 때문에 항상 목록을 통해 작업 할 수 있습니다.

1

아니요, 현재 현재의 새 개체가 만들어지지 않고 변수의 현재 요소가 목록의 마지막 요소에 도달 할 때까지 다시 할당되고 목록의 끝에 생성 된 새 Node 개체 만 할당됩니다. .