.. _topic7-example: Example - Linked Lists ========================= Append To a List ----------------- :: typedef struct list { int data; struct list *next; } LIST; LIST *append( LIST *start, int newdata ) { LIST *new, *end, *ret; if( (new = (LIST *)malloc(sizeof(LIST))) == NULL) { fprintf( stderr, "Memory Allocation error.\n" ); return 1; } if( start == NULL ) ret = new; else { ret = start; end = start; while( end->next != NULL ) end = end->next; end->next = new; } new->data = newdata; new->next = NULL; return( ret ); } Delete From a List ----------------------- :: LIST *remove( LIST *start, LIST *remove ) { LIST *previous, *ret; if( remove == NULL || start == NULL ) return( NULL ); if( remove == start ) { ret = remove->next; free( remove ); return( ret ); } previous = start; while( previous->next != remove && previous->next != NULL ) previous = previous->next; if( previous->next != NULL ) { /* item found in list */ previous->next = remove->next; free( remove ); } return( start ); } .. _sort_insert: Sorted Insert To a List ------------------------- .. index:: Insertion sort :: LIST *insert( LIST *start, int newdata ) { LIST *new, *next, *previous, *ret; if( (new = (LIST *)malloc(sizeof(LIST))) == NULL) { fprintf( stderr, "Memory Allocation error.\n" ); return 1; } if( start == NULL ) { ret = new; new->next = NULL; } else { next = start; previous = NULL; while( next->data < newdata && next != NULL ) { previous = next; next = next->next; } new->next = next; if( previous == NULL ) ret = new; else { previous->next = new; ret = start; } } new->data = newdata; return( ret ); }