C language - linked list

linked list ของตัวอักษร โดยการเพิ่มข้อมูลต่อท้าย ข้อมูลเดิม
/*linklist.h*/

typedef struct node * NODEPTR;

struct node {
    char * data;
    NODEPTR next;
} NODE;

void print_list(NODEPTR link);
int insert_list(char * value, NODEPTR * link);
NODEPTR make_node(char * value);

/*linklist.c*/

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

#include "linklist.h"

int main() {

    NODEPTR link = NULL;
    char str1[] = "A10";
    char str2[] = "A20";
    char str3[] = "B1";
    char str4[] = "B5";

    insert_list(str1, &link);
    insert_list(str2, &link);
    insert_list(str3, &link);
    insert_list(str4, &link);
    print_list(link);
    return 0;
}

void print_list(NODEPTR link) {
    for (; link != NULL; link = link->next) {
        printf("%s\n", link->data);
    }
}

int insert_list(char * value, NODEPTR * link) {
    NODEPTR curr = *link, prev = NULL, make_node(), temp;
    for (; curr != NULL ; curr = curr->next)
        prev = curr;
    if ((temp = make_node(value)) != NULL) {
        temp->next = curr;
        if (prev == NULL)
            *link = temp;
        else
            prev->next = temp;
    }
    return (temp != NULL);
}

NODEPTR make_node(char * value) {
    NODEPTR newptr;

    if ((newptr = (NODEPTR) malloc(sizeof(struct node))) != NULL) {
        newptr->data = value;
        newptr->next = NULL;
    }
    return (newptr);
}