delete_list(list **l, item_type x) { list *p; /* item pointer */ list *pred; /* predecessor pointer */ list *search_list(), *predecessor_list(); p = search_list(*l,x); if (p != NULL) { pred = predecessor_list(*l,x); if (pred == NULL) /* splice out out list */ *l = p->next; else pred->next = p->next; free(p); /* free memory used by node */ } }
llist_t *predecessor_list(llist_t *l, int x) { if(l == NULL || l->next == NULL) return NULL; if(l->next->item == x) return l; else return predecessor_list(l->next, x); }
list *predecessor_list(list *l, item_type x) { if ((l == NULL) || (l->next == NULL)) { printf("Error: predecessor sought on null list.\n"); return(NULL); } if ((l->next)->item == x) return(l); else return( predecessor_list(l->next, x) ); }
void delete_list(llist_t **l, int x) { llist_t *p, *t; if(NULL == *l) return; if(x == (*l)->item) { t = *l; *l = (*l)->next; free(t); } else { p = predecessor_list(*l, x); if(p != NULL) { t = p->next; p->next = p->next->next; free(t); } } }