C language – linked list

linked list ของ Integer  โดยการแทรกข้อมูล แบบเรียงลำดับจากน้อยไปมาก

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

linklist.h

/*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

/*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);
}