Page 352 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 352
1. 리스트에 노드가 1개만 있는 경우
머리 노드를 삭제하는 것과 같습니다. RemoveFront 함수로 처리합니다.
2. 리스트에 노드가 2개 이상 있는 경우
그림 9-11을 통해 삭제 과정을 구체적으로 설명했습니다.
1 ‘꼬리 노드’와 ‘꼬리 노드로부터 두 번째 노드’를 찾습니다. 스캔하는 방법은 InsertRear 함
수와 비슷하지만 현재 스캔하고 있는 노드의 ‘앞에 있는 노드’를 가리키는 변수 pre를 추가한
점이 다릅니다.
2 꼬리 노드부터 두 번째 노드 E의 다음을 가리키는 포인터에 널을 대입하고 꼬리 노드 F의
메모리 영역을 해제합니다. 선택한 노드 crnt가 가리키는 노드는 삭제한 다음의 꼬리 노드 pre가 됩니다.
a 삭제 전 head
pre ptr
A B C D E F
1
b 삭제 후 head
pre ptr
A B C D E F
2
NULL 해제합니다.
[그림 9-11] 꼬리 노드를 삭제하는 과정
while문이 종료되면 pre는 노드 E를, ptr은 노드 F를 가리킵니다(그림 9-11).
선택한 노드를 삭제하는 RemoveCurrent 함수
RemoveCurrent 함수는 현재 선택한 노드(list->crnt)가 가리키는 노드를 삭제하는 함수입니
다. 선택한 노드가 머리 노드인지 아닌지에 따라 다음의 작업을 수행합니다.
1. crnt가 머리 노드인 경우
머리 노드를 삭제하면 됩니다. RemoveFront 함수로 처리합니다.
2. crnt가 머리 노드가 아닌 경우
그림 9-12를 통해 삭제 과정을 구체적으로 설명했습니다.
352 C 알고리즘