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
   346   347   348   349   350   351   352   353   354   355   356