While building the list, you can maintain a pointer to the last node. This makes appending nodes easier:
Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct node node;
struct node {
char value;
node *next;
};
int main(void)
{
char a[] = {'1','4','8'};
node *head = NULL;
node *end;
size_t i;
for (i = 0; i < sizeof a / sizeof *a; i++) {
node *new = malloc(sizeof *new);
if (new == NULL)
break;
new->value = a[i];
new->next = NULL;
if (head == NULL)
head = end = new;
else {
end->next = new;
end = end->next;
}
}
while (head != NULL) {
node *save = head->next;
printf("%c\n", head->value);
free(head);
head = save;
}
return 0;
}