#include #include struct linked_list { int data; struct linked_list * next; }; typedef struct linked_list item; void add(item **p, int data) { if (!(*p)) { (*p) = (item *)malloc(sizeof(item)); (*p)->next = NULL; (*p)->data = data; } else add(&(*p)->next,data); } void print(item *p) { while (p) { printf("%d\n", p->data); p=p->next; } } char _delete(item **p) { item *ptr = *p; if (!(*p)) return '\0'; if (*p == ((*p)->next)) { ptr = (*p); *p = NULL; } else { ptr = (*p)->next; } free(ptr); } char delsearch(item **p, int e) { item *tmp = (*p); if (!(*p)) return '\0'; while (((tmp->next) != (*p)) && ((tmp->next->data) != e)) tmp = tmp->next; if ((tmp->next->data) !=e) if (tmp == (*p)->next) *p = NULL; else *p = tmp; return _delete(&tmp); } int main(int argc, char *argv[]) { item *ptr=NULL; int i; for (i=1; i<=10; i++) { add(&ptr,i); } delsearch(&ptr,5); print(ptr); return EXIT_SUCCESS; }