이때 이전 코드에서는 두 번째 데이터 노드가 self.head.next.next였지만, 이번에는 self.head.next.prev란 점에 주의해야 합니다. 이전에 head의 next가 두 번째 데이터 노드를 가리키도록 변경했기 때문입니다. 두 번째 데이터 노드의 prev까지 더미 노드를 가리키도록 하면 더 이상 첫 번째 데이터 노드를 가리키는 참조는 없습니다. 이제 가비지 컬렉터가 이 노드를 삭제할 것입니다.
delete_first() 메서드를 이해했다면 삭제 연산의 나머지 두 메서드인 delete_last()와 delete_node() 역시 쉽게 이해할 수 있을 것입니다. 코드만 싣도록 하겠습니다. 꼭 그림을 그려 가면서 이해해 보기 바랍니다.
코드 4-10
def delete_last(self):
if self.empty():
return
self.tail.prev = self.tail.prev.prev
self.tail.prev.next = self.tail
self.d_size -= 1
def delete_node(self, node):
node.prev.next = node.next
node.next.prev = node.prev
self.d_size -= 1