rendered paste body#include <stdio.h> /* for printf */
#include <stdlib.h> /* for malloc */
typedef struct ns {
int data;
struct ns *next;
} node;
node *list_add(node ** p, int i) {
node *n = malloc(sizeof(*n));
n->next = *p;
*p = n;
n->data = i;
return n;
}
void list_remove(node ** p) {
if (p) {
node *n = *p;
*p = (*p)->next;
free(n);
}
}
node **list_search(node ** n, int i) {
if (!n) return NULL;
while (*n) {
if ((*n)->data == i) {
return n;
}
n = &(*n)->next;
}
return NULL;
}
void list_print(node * n) {
if (!n) printf("list is empty\n");
while (n) {
printf("print %p %p %i \n", n, n->next, n->data);
n = n->next;
}
}
int main(void) {
node *n = NULL;
list_add(&n, 0);
list_add(&n, 1);
list_add(&n, 2);
list_add(&n, 3);
list_add(&n, 4);
list_print(n);
list_remove(&n); /* remove first */
list_remove(&n->next); /* remove second */
list_remove(list_search(&n, 1));
list_remove(&n->next); /* remove second to last node */
list_remove(&n); /* remove last */
list_print(n);
return 0;
}