Example #1
0
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 */
	}
}
Example #2
0
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);
}
Example #3
0
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) );
}
Example #4
0
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);
        }
    }
}