#define LINKED_LIST struct listElement { void * data; struct listElement *next; struct listElement *previous; }; typedef struct listElement LISTEL; LISTEL * insertBefore(void *theData, LISTEL *place) { LISTEL * element = malloc(sizeof(LISTEL)); element->data = theData; if(place->previous == NULL) { element->next = place; place->previous = element; } else { LISTEL * previous = place->previous; previous->next = element; element->previous = previous; place->previous = place; element->next = place; } return element; } LISTEL * insertAfter(void *theData, LISTEL *place) { LISTEL * element = malloc(sizeof(LISTEL)); element->data = theData; if(place->next == NULL) { element->previous = place; place->next = element; } else { LISTEL * next = place->next; next->previous = element; element->next = next; place->next = element; element->previous = place; } return element; }