#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct node {
    char* name;
    struct node* link;
};
int getname(char*);
struct node* addlist(struct node*, char*);
char* namecopy(char*);
void listprint(struct node*);

struct node* invert(struct node*);

int main()
{
    struct node* root;
    char name[80];
    root = NULL;
    while (getname(name) != EOF)
        root = addlist(root, name);
    listprint(root);

    root = invert(root);    //함수 콜
    printf("------- invert ------\n");
    listprint(root);         //역순화된 연결 리스트 출력

    return  0;
}
int getname(char* pname)
{
    int i = 0;   char c;
    while (((c = getchar()) != '\n') && c != EOF)
        *(pname + i++) = c;
    if (c == '\n')
        *(pname + i) = '\0';
    if (c == EOF)
        *pname = EOF;
    return  *pname;
}

struct node* addlist(struct node* p, char* w)
{
    if (p == NULL) {
        p = (struct node*)malloc(sizeof(struct node));
        p->name = namecopy(w);
        p->link = NULL;
    }
    else
        p->link = addlist(p->link, w);
    return  p;
}

char* namecopy(char* s)
{
    char* p;  int i = 0;
    p = (char*)malloc(strlen(s) + 1);
    while ((*(p + i) = *(s + i)) != '\0')   i++;
    return  p;
}

void listprint(struct node* p)
{
    while (p != NULL) {
        printf("%s\n", p->name);
        p = p->link;
    }
}

struct node* invert(struct node* lead) {

    struct node * middle, * trail;
    middle = NULL;
    while (lead != NULL) {

        trail = middle;
        middle = lead;
        lead = lead->link;
        middle->link = trail;

 /*       trail = lead;
        lead = lead->link;
        trail->link = middle;
        middle = trail;*/

        //되긴한데 정석은 아님

    }

    return middle;

}
Posted by pi92

블로그 이미지
pi92

공지사항

Yesterday
Today
Total

달력

 « |  » 2025.7
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함