Page 344 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 344

a  노드 0개               b  노드 1개            c  노드 2개


                       head                  head              head
                            NULL
                                                  A                  A            B
                       현재 아무런 노드도
                       가리키고 있지 않습니다.           head->next         head->next  head->next->next
                                         [그림 9-5] 연결 리스트와 노드 개수에 따른 상태


                   그러면 그림을 보면서 연결 리스트를 좀 더 자세히 살펴보겠습니다.



                   연결 리스트가 비어 있는지 판단하는 방법
                    a      는 노드가 하나도 없는 상태입니다(빈 연결 리스트). 이때 리스트가 비어 있는지 판단하는 방
                   법은 다음과 같습니다.



                     list->head == NULL                 /* 연결 리스트가 비어 있는지 확인합니다. */


                   노드가 1개인 연결 리스트를 판단하는 방법
                    b      는 연결 리스트에 노드가 1개만 있는 상태입니다. 변수 list->head가 가리키는 노드는 머

                   리 노드 A입니다. 이때 연결 리스트에는 1개의 노드만 있기 때문에 머리 노드 A는 리스트의
                   꼬리 노드이기도 합니다. 따라서 next의 값은 널입니다. list->head가 가리키는 노드 안의 뒤
                   쪽 포인터 next 값이 널이므로 연결 리스트의 노드가 1개인지 판단하는 방법은 다음과 같습

                   니다.


                     list->head->next == NULL            /* 노드가 1개인지 확인합니다. */


                   노드가 2개인 연결 리스트를 판단하는 방법

                    c      는 노드가 2개 있는 상태입니다. 머리 노드는 A, 꼬리 노드는 B입니다. 이때 list->head가
                   가리키는 노드 A의 next는 노드 B를 가리킵니다. 꼬리 노드 B의 next는 널 값을 가지고 있기
                   때문에 연결 리스트의 노드가 2개인지 판단하는 방법은 다음과 같습니다.



                     list->head->next->next == NULL       /* 노드가 2개인지 확인합니다. */


                   노드 A의 데이터는 list->head->data이고 노드 B의 데이터는 list->head->next->data
                   입니다.




                   344   C 알고리즘
   339   340   341   342   343   344   345   346   347   348   349