더북(TheBook)

remove( ) 함수의 구현: 데이터의 삭제

remove() 함수는 대상 데이터가 있으면 해당 데이터를 지우고 삭제된 데이터를 반환합니다. 대상 데이터가 없으면 None을 반환합니다. remove() 함수는 데이터를 지울 때 네 가지 경우를 고려합니다. 첫 번째는 데이터 개수가 1개일 때입니다. 두 번째는 지우려는 노드가 head가 가리키는 노드일 때입니다. 세 번째는 지우려는 노드가 tail이 가리키는 노드일 때입니다. 마지막은 앞의 세 가지 예외가 아닌 일반적인 경우입니다. 우선 remove() 함수의 전체 코드를 살펴봅시다.

코드 12-7 data_structure_1/linked_list.py ⑦ (remove() 함수)

    def remove(self, target):
        if self.empty():
            return None

        # before는 current 노드의 이전 노드를 가리킨다
        # 삭제할 때 요긴하게 쓰인다
        bef = self.head     #17
        cur = self.head

        #A. 삭제 노드가 첫 번째 노드일 때
        if target = = cur.data:
            #A-1. 데이터가 하나일 때
            if self.size() = = 1:
                self.head = None
                self.tail = None
            #A-2. 데이터가 두 개 이상일 때
            else:
                self.head = self.head.next
            self.d_size -= 1
            return cur.data

            while cur.next:
                 bef = cur
                 cur = cur.next
                 #B. 삭제 노드가 첫 번째 노드가 아닐 때
                 if target = = cur.data:
                     #B-1. 삭제 노드가 마지막 노드일 때
                     if cur = = self.tail:
                         self.tail = bef
                     #B-2. 일반적인 경우
                     bef.next = cur.next   #18
                     self.d_size -= 1
                     return cur.data

            return None
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.