■ 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