Page 351 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 351
꼬리 노드를 삭제하는 RemoveRear 함수
RemoveRear 함수는 꼬리 노드를 삭제하는 함수입니다. 리스트에 노드가 몇 개 있는지에
따라 그 경우에 해당하는 작업을 수행합니다.
실습 9-2[D] •완성 파일 chap09/LinkedList.c
01 /*--- 머리 노드를 삭제하는 함수 ---*/
02 void RemoveFront (List *list)
03 {
04 if(list->head != NULL) {
05 Node *ptr = list->head->next; /* 두 번째 노드에 대한 포인터 */
06 free(list->head); /* 머리 노드를 해제 */
07 list->head = list->crnt = ptr; /* 새로운 머리 노드 */
08 }
09 }
10
11 /*--- 꼬리 노드를 삭제하는 함수 ---*/
12 void RemoveRear (List *list)
13 {
14 if(list->head != NULL) {
15 if((list->head)->next == NULL) /* 노드가 1개만 있는 경우 */
16 RemoveFront(list); /* 머리 노드를 삭제 */
17 else {
18 Node *ptr = list->head; 1
19 Node *pre;
20 while(ptr->next != NULL) { while문이 종료되면 ptr은 꼬리 노드를
21 pre = ptr; 가리키고, pre는 꼬리 노드로부터 두 번
째 노드를 가리킵니다.
22 ptr = ptr->next;
23 }
24 pre->next = NULL; /* pre는 꼬리 노드로부터 두 번째 노드 */
25 free(ptr); /* ptr은 꼬리 노드 */ 2
26 list->crnt = pre;
27 }
28 }
29 }
30 (실습 9-2[E]에서 계속)
09•리스트 351