void insert(int key, int data) { struct item *new, *prev; /* create the new item */ new = (struct item *)malloc(sizeof(struct item)); /* (should check for NULL return, but omit for this example) */ new->key = key; new->data = data; /* find the node it goes after; NULL if it goes at the front */ if (head == NULL || head->key >= key) { prev = NULL; } else { for (prev = head; prev->next && prev->next->key < key; prev = prev->next) ; } /* link it in */ if (prev == NULL) { /* goes at the head of the list */ new->next = head; head = new; } else { /* goes after 'prev' */ new->next = prev->next; prev->next = new; } } void delete(int key) { struct item *it, *prev = NULL; /* find it */ for (it = head; it && it->key < key; it = it->next) prev = it; if (it && it->key == key) { if (prev) { /* delete an item which is not first */ prev->next = it->next; } else { /* delete the head */ head = it->next; } free((char *)it); } else { printf("error: %d not found\n", key); } }