인프런 커뮤니티 질문&답변

만족한 피라미님의 프로필 이미지
만족한 피라미

작성한 질문수

코딩테스트 [ ALL IN ONE ]

[코테 적용] 👉 연결리스트 구현 (전반부)

디스코드 Doubly LinkedList 구현 코드 관련 질문

해결된 질문

작성

·

148

1

def insert(self, idx, value):
        new_node = Node(value)
        if idx == 0:
            new_node.next = self.head
            self.head = new_node
        else:
            current = self.head
            for _ in range(idx-1):
                current = current.next
            new_node.next = current.next
            current.next = new_node     
    def remove(self, idx):
        if idx == 0:
            self.head = self.head.next # garbage collector가 알아서 처리해준다.
        else:
            current = self.head
            for _ in range(idx-1):
                current = current.next
            current.next = current.next.next
  1. def insert의 if문에서 self.head.prev=new_node 이렇게 연결지어주지 않아도 괜찮나요?

  2. def insert의 else문에서

     

    new_node.prev=current

     

    current.next.prev=new_node

     

    이 부분을 추가 안해도 괜찮나요?

  3. def remove의 if문에서 garbage collector가 알아서 처리해주신다고 했는데 1->2->3 이렇게 연결되어있고

     

    인덱스 0인 1을 삭제한다고 했을 때 위의 코드대로 하면 head는 2를 가리킨 상태여도 1이랑 2는 아직 연결되어있는데 알아서 삭제가 되나요? 그래서 self.head.prev=None 이 코드를 추가해야된다고 생각했는데 맞을까요?

  4. def remove의 else문에서 마찬가지로 current.next.prev=current 문을 추가하지 않아도 괜찮나요?

 

답변 1

0

개발남노씨님의 프로필 이미지
개발남노씨
지식공유자

안녕하세요 만족한 피라미님

 

  1. def insert의 if문에서 self.head.prev=new_node 이렇게 연결지어주지 않아도 괜찮나요?

단방향 연결리스트에는 필요없고, 양방향 연결리스트라면 필요합니다.

 

  1. def insert의 else문에서

     

    new_node.prev=current

     

    current.next.prev=new_node

     

    이 부분을 추가 안해도 괜찮나요?

단방향 연결리스트에는 필요없고, 양방향 연결리스트라면 필요합니다.

  1. def remove의 if문에서 garbage collector가 알아서 처리해주신다고 했는데 1->2->3 이렇게 연결되어있고

     

    인덱스 0인 1을 삭제한다고 했을 때 위의 코드대로 하면 head는 2를 가리킨 상태여도 1이랑 2는 아직 연결되어있는데 알아서 삭제가 되나요? 그래서 self.head.prev=None 이 코드를 추가해야된다고 생각했는데 맞을까요?

단방향 연결리스트라서 prev참조가 없어서 해당코드는 필요 없습니다.

또한, 삭제된 노드는 더 이상 다른 노드로부터 참조되지 않게 되서, 그 노드에 대한 참조가 없는 이상 가비지 컬렉션의 대상이 되어 None으로 할 필요없이 알아서 메모리에서 삭제가 됩니다.

 

  1. def remove의 else문에서 마찬가지로 current.next.prev=current 문을 추가하지 않아도 괜찮나요?

단방향 연결리스트에는 필요없고, 양방향 연결리스트라면 필요합니다.

 

 

질문에대한 답이 되었을까요~?

 

추가적으로 질문 있으시면 편하게 남겨주세요 :)

만족한 피라미님의 프로필 이미지
만족한 피라미

작성한 질문수

질문하기