単方向リスト

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

/*構造体の定義*/
struct node {
	int num;
	struct node *next;
};
typedef struct node NODE;
NODE *start = NULL;

/*リストにデータを追加する関数(並べ替えつき)*/
void addList(int data)
{
	NODE *p = start, *pend = NULL, *new;
	
	/*リストの末尾のノードを求める処理*/
	while(p != NULL && p->num < data){
		pend = p;
		p = p->next;
	}
	
	/*新しいノードを作成する*/
	new = (NODE *)malloc(sizeof(NODE));
	if(new == NULL){
		printf("mallocに失敗しました。\n");
		exit(1);
	}
	
	/*ノードにデータを格納する*/
	new->num = data;
	new->next = p;
	
	if(pend == NULL)
		start = new;
	else
		pend->next = new;
}

/*リストの内容を表示する関数*/
void printList(void)
{
	NODE *p;
	
	printf("START ");
	for(p = start; p != NULL; p = p->next)
		printf("--> %d ", p->num);
	printf("\n");
}

/*リストのメモリーを解放する関数*/
void delList(void)
{
	NODE *p = start, *next;
	
	while(p != NULL){
		next = p->next;
		free(p);
		p = next;
	}
}

int main()
{
	int d;
	
	while(1){
		printf("数値を入力してください(0で終了): ");
		scanf("%d", &d);
		if(d == 0) break;
		
		addList(d);
		printList();
	}
	
	delList();
	return 0;
}
実行結果
数値を入力してください(0で終了): 5
START --> 5
数値を入力してください(0で終了): 3
START --> 3 --> 5
数値を入力してください(0で終了): 2
START --> 2 --> 3 --> 5
数値を入力してください(0で終了): 8
START --> 2 --> 3 --> 5 --> 8
数値を入力してください(0で終了): 4
START --> 2 --> 3 --> 4 --> 5 --> 8
数値を入力してください(0で終了): 12
START --> 2 --> 3 --> 4 --> 5 --> 8 --> 12
数値を入力してください(0で終了): 6
START --> 2 --> 3 --> 4 --> 5 --> 6 --> 8 --> 12
数値を入力してください(0で終了): 0