C language - linked list

linked list ของ Integer  โดยการแทรกข้อมูล แบบเรียงลำดับจากน้อยไปมาก
/*linklist.h*/
typedef struct node * NODEPTR;

struct node {
    int data;
    NODEPTR next;
} NODE;

void print_list(NODEPTR link);
int insert_list(int val, NODEPTR * link);
NODEPTR make_node(int value);
 
/*linklist.c*/

#include <stdio.h>
#include <stdlib.h>
#include "linklist.h"

int main() {

    NODEPTR link = NULL; // the sorted linked list
    int val; // input value

    val = 10;
    insert_list(val, &link);
    val = 20;
    insert_list(val, &link);
    val = 1;
    insert_list(val, &link);
    val = 15;
    insert_list(val, &link);

    print_list(link);
    return 0;
}

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

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

NODEPTR make_node(int value) {
    NODEPTR newptr;
    //char *malloc();

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

ที่มา: การโปรแกรมภาษา C ดร.ดวงแก้ว สวามิภักดิ์