#include typedef double ListData; struct List { ListData data; List * prev; List * next; }; List * insertAfter (List * element, ListData value){ List * newElement = new List; newElement -> data = value; newElement -> prev = element; if (element != 0){ newElement -> next = element -> next; element -> next = newElement; if (newElement -> next) newElement -> next -> prev = newElement; } else newElement->next = 0; return newElement; } List * removeElement (List * element){ if (!element) return 0; List * next = element -> next; if (element -> prev) element -> prev -> next = element -> next; if (element -> next) element -> next -> prev = element -> prev; delete element; return next; } void removeList (List * head){ while (head) head = removeElement (head); } List * next (List * elem){ if (elem == 0) return 0; return elem -> next; } List * prev (List * elem){ if (elem == 0) return 0; return elem -> prev; } List * element (List * head, unsigned index){ List * result = head; for (;index > 0; --index) result = next (result); return result; } void printList (List * head){ List *elem; printf ("list\n"); for (elem = head; elem; elem = next(elem)) printf ("\tdata: %lg ptr: %p prev: %p next: %p\n", elem->data, elem, elem->prev, elem->next); printf ("end_list\n"); } int main (void){ List * head = 0, * tail = 0; head = insertAfter (0, 1); insertAfter (head, 2); insertAfter (head, 3); printList (head); element (head, 1) -> data = 10; printList (head); removeElement (head -> next); printList (head); removeList (head); return 0; }