1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #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;
- }
- LISTEL * circularizeList(LISTEL *start)
- {
- LISTEL *tail = start;
- while (tail->next != NULL)
- tail = tail->next;
- start->previous = tail;
- tail->next = start;
- return start;
- }
- void * removeElement(LISTEL *remove)
- {
- LISTEL *before = remove->previous;
- LISTEL *after = remove->next;
- void * value = remove->data;
- before->next = after;
- after->previous = before;
- free(remove);
- return value;
- }
|