#include #include typedef struct list { char *str; struct list *next; struct list *prev; } list; int main (void) { unsigned int i; list *start, *current, *end; start = NULL; for (i = 0; i < 10; i++) { list *chunk; chunk = malloc (sizeof (list)); chunk->str = malloc (8); sprintf (chunk->str, "hello-%d", i); if (!start) { start = current = chunk; start->prev = NULL; } else { list *tmp; tmp = current; current->next = chunk; current = current->next; current->prev = tmp; } } end = current; current = start; while (current) { puts (current->str); current = current->next; } current = end; while (current) { puts (current->str); current = current->prev; } current = start; while (current) { list *tmp; tmp = current->next; free (current->str); free (current); current = tmp; } exit (EXIT_SUCCESS); }