#include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define NAME_SPACE 5 typedef struct _node{ char *name; struct _node *next; }linkedList; typedef struct { linkedList *head; }linkedList_h; linkedList_h *createListHead() { linkedList_h *r; r=(linkedList_h*)malloc(sizeof(linkedList_h)); // ë©~T모리 í~U| ë~K¹ r->head=NULL; // ì´~H기í~Y~T return r; } void addLast(linkedList_h *L, char *str) { linkedList *newNode; // ì~C~Hë~E¸ë~S~\ ì~C~]ì~D± linkedList *p; newNode=(linkedList*)malloc(sizeof(linkedList)); newNode->name=(char*)malloc(sizeof(char)*NAME_SPACE); strcpy(newNode->name,str); newNode->next=NULL; if(L->head==NULL){ L->head=newNode; return; } p=L->head; while(p->next != NULL){ p=p->next; } p->next=newNode; } void reverseList(linkedList_h *L) { linkedList *p; linkedList *q; linkedList *r; p=L->head; q=NULL; r=NULL; while(p != NULL){ r=q; q=p; p=p->next; q->next=r; } L->head=q; } void deleteNode(linkedList_h *L, char *str) { linkedList *p; linkedList *pre; p=L->head; if(!strcmp(p->name, str)){ L->head=p->next; free(p); return; } while(p != NULL){ pre=p; p=p->next; if(!strcmp(p->name, str)){ pre->next=p->next; free(p); return; } } } void freeLinkedList(linkedList_h *L) { linkedList *p; while(L->head != NULL){ p=L->head; L->head=L->head->next; free(p); p=NULL; } } void printList(linkedList_h *L) { linkedList *p; p=L->head; printf("( "); while(p != NULL){ printf("%s ",p->name); p=p->next; } printf(")\n"); } int main(void){ linkedList_h *L; L=createListHead(); addLast(L, "Kim"); // ì~C~H ë~E¸ë~S~\ ì~B½ì~^~E addLast(L, "Lee"); // ì~C~H ë~E¸ë~S~\ ì~B½ì~^~E addLast(L, "Park"); // ì~C~H ë~E¸ë~S~\ ì~B½ì~^~E printList(L); // ì¶~\ë| ¥ addLast(L, "Yoo"); // ì~C~H ë~E¸ë~S~\ ì~B½ì~^~E printList(L); // ì¶~\ë| ¥ deleteNode(L, "Park"); // í~J¹ì| ~U ê°~R ë~E¸ë~S~\ ì~Bì| ~\ printList(L); // ì¶~\ë| ¥ reverseList(L); // 리ë²~Dì~J¤ printList(L); // ì¶~\ë| ¥ freeLinkedList(L); // ë§~Aí~A¬ë~S~\ 리ì~J¤í~J¸ L í~U´ì| ~\ printList(L); return 0; }