* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함 가정 오른쪽 프로그램과 같은 상황에서 아래와 같은 main 프로그램을 실행할 경우 * 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함 typedef int element; typedef struct ListNode { element data; struct ListNode *link; } ListNode; int main(void) { ListNode *header = NULL; ListNode *a, *b; a = (ListNode *) malloc(sizeof(ListNode)); a->data =10; insert_node(&header, NULL, a); b = (ListNode *) malloc(sizeof(ListNode)); b->data =20; insert_node(&header, a, b); } // phead: 리스트의 헤드 포인터의 포인터 // p : 선행 노드 // new_node : 삽입될 노드 void insert_node(ListNode **phead, ListNode *p, ListNode *new_node) { if( *phead == NULL ){ // 공백리스트인 경우 new_node->link = NULL; *phead = new_node; } else if( p == NULL ){ // p가 NULL이면 첫번째 노드로 삽입 new_node->link = *phead; else { // p 다음에 삽입 new_node->link = p->link; p->link = new_node;
} } 그림 (1) 그림 (2) 2000 header 2000 10 10 | a (8bytes) | NULL 3008 20 | 주소 주소 1000 2000 header 1000 2000 int main(void) { ListNode *header = NULL; ListNode *a, *b; a = (ListNode *) malloc(sizeof(ListNode)); a->data =10; insert_node(&header, NULL, a); // 그림(1) b = (ListNode *) malloc(sizeof(ListNode)); b->data =20; insert_node(&header, a, b); // 그림(2) } } 2000 10 2000 10 | a (8bytes) | NULL 3008 2007 2007 } 3008 3008 20 | b (8bytes) | NULL 300E 300E data 4B *link 4B malloc(ListNode) 으로 운영체제 메모리 영역 8bytes 를 받음 그림 (1) 그림 (2)