:se enc=utf8


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
const int NAME_SPACE = 20;
int cnt = 0;

typedef struct _node
{
        char *name;
        struct _node *next;
}linkedList;
linkedList *tail = NULL;

typedef struct
{
        linkedList *head;
}linkedList_h;

linkedList_h *createListHead();
void addNode(linkedList_h *L);
void deleteNode(linkedList_h *L);
void freeLinkedList(linkedList_h *L);
void printList(linkedList_h *L);

linkedList_h *createListHead()
{
        linkedList_h *r = NULL; // ì~C~H í~W¤ë~S~\ ì~C~]ì~D±
        r=(linkedList_h*)malloc(sizeof(linkedList_h)); // ë©~T모리 í~U| ë~K¹
        r->head=NULL;
        return r; // 주ì~F~L ë°~Xí~Y~X
}

void addNode(linkedList_h *L)
{
        char str[NAME_SPACE] = {'\0'};
        int idx = 0;
        printf("ì~B½ì~^~Eí~U|  ë~E¸ë~S~\ì~]~X ë~M°ì~]´í~D° ì~^~Eë| ¥ : ");
        scanf("%s",&str);
        printf("ì~B½ì~^~Eí~U|  ì~\~Dì¹~X ì~D| í~C~] : ");
        scanf("%d",&idx);
        ++cnt;

        linkedList *newNode = NULL;
        linkedList *p = L->head;
        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;
                newNode->next=L->head;
                tail=newNode;
                return;
        }
        if(idx == 0){
                newNode->next=p;
                L->head=newNode;
                return;
        }
        while(idx--){
                p=p->next;
        }
        newNode->next=p->next;
        p->next=newNode;
}

void deleteNode(linkedList_h *L)
{
        char str[NAME_SPACE] = {'\0'};
        printf("ì~B­ì| ~\í~U|  ë~M°ì~]´í~D° ì~^~Eë| ¥ :");
        scanf("%s",&str);
        --cnt;

        linkedList *p = L->head;
        linkedList *pre = NULL;

        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 = NULL;
        while(cnt--){
                p=L->head;
                L->head=L->head->next;
                free(p);
                p=NULL;
        }
}

void printList(linkedList_h *L)
{
        int pcnt = 0;
        int tcnt = cnt;
        linkedList *p = L->head;

        printf("리ì~J¤í~J¸ ì¶~\ë| ¥(%d) : ",cnt);

        while(p != NULL){
                printf("(%d)%s ",pcnt++,p->name);
                p=p->next;
                if(!--tcnt){puts("");return;}
        }
        puts("");
}

int main(void)
{
        int slct = 0;
        linkedList_h *L = createListHead();

        while(slct!=4)
        {
                puts("\në~K¨ì~H~\ ì~[~Pí~X~U 리ì~J¤í~J¸ ë©~Të~I´"); // ë©~Të~I´
                puts("=================");
                puts("1. ë~E¸ë~S~\ ì~B½ì~^~E");
                puts("2. ë~E¸ë~S~\ ì~B­ì| ~\");
                puts("3. 리ì~J¤í~J¸ ì¶~\ë| ¥");
                puts("4. í~T~Dë¡~\ê·¸ë~^¨ ì¢~Eë£~L");
                puts("=================");
                printf("ë©~Të~I´ ì~D| í~C~] : ");

                scanf("%d",&slct);

                switch(slct){
                        case 1:
                                addNode(L); // 1. ë~E¸ë~S~\ ì~B½ì~^~E
                                break;
                        case 2:
                                deleteNode(L); // 2. ë~E¸ë~S~\ ì~B­ì| ~\
                                break;
                        case 3:
                                printList(L); // 3. 리ì~J¤í~J¸ ì¶~\ë| ¥
                                break;
                        case 4:
                                break; // 4. ì¢~Eë£~L
                        default:
                                puts("ì~^~X못ë~P~\ ëª~Eë| ¹ì~^~Eë~K~Hë~K¤.");
                                break;
                }
        }
//      freeLinkedList(L); // ë§~Aí~A¬ë~S~\ 리ì~J¤í~J¸ L í~U´ì| ~\

        return 0;
}


2 files to edit