#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
void display_list(struct node *list) {
struct node *cur;
printf("list: %p, values:", list
); for(cur = list; cur != NULL; cur = cur->next) {
}
}
void add_to_front_of_list(struct node **list, int n) {
struct node
*node
= malloc(sizeof(node
)); node->value = n;
node->next = *list;
*list = node;
}
void free_node(struct node **n)
{
struct node *next = (*n)->next;
*n = next;
}
void delete_from_list(struct node **list, int n) {
while (*list != NULL) {
if ((*list)->value == n) {
free_node(list);
break;
}
list = &((*list)->next);
}
}
int main(void) {
struct node *list = NULL;
for(int i = 5; i > 0; --i) {
add_to_front_of_list(&list, i);
}
display_list(list);
delete_from_list(&list, 1);
display_list(list);
delete_from_list(&list, 3);
display_list(list);
delete_from_list(&list, 5);
display_list(list);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBub2RlIHsKICAgIGludCB2YWx1ZTsKICAgIHN0cnVjdCBub2RlICpuZXh0Owp9OwoKdm9pZCBkaXNwbGF5X2xpc3Qoc3RydWN0IG5vZGUgKmxpc3QpIHsKCXN0cnVjdCBub2RlICpjdXI7CglwcmludGYoImxpc3Q6ICVwLCB2YWx1ZXM6IiwgbGlzdCk7Cglmb3IoY3VyID0gbGlzdDsgY3VyICE9IE5VTEw7IGN1ciA9IGN1ci0+bmV4dCkgewoJCXByaW50ZigiICVkIiwgY3VyLT52YWx1ZSk7Cgl9CglwcmludGYoIlxuIik7Cn0KCnZvaWQgYWRkX3RvX2Zyb250X29mX2xpc3Qoc3RydWN0IG5vZGUgKipsaXN0LCBpbnQgbikgewoJc3RydWN0IG5vZGUgKm5vZGUgPSBtYWxsb2Moc2l6ZW9mKG5vZGUpKTsKCW5vZGUtPnZhbHVlID0gbjsKCW5vZGUtPm5leHQgPSAqbGlzdDsKCSpsaXN0ID0gbm9kZTsKfQoKdm9pZCBmcmVlX25vZGUoc3RydWN0IG5vZGUgKipuKQp7CiAgICBzdHJ1Y3Qgbm9kZSAqbmV4dCA9ICgqbiktPm5leHQ7CiAgICBmcmVlKCpuKTsKICAgICpuID0gbmV4dDsKfQoKdm9pZCBkZWxldGVfZnJvbV9saXN0KHN0cnVjdCBub2RlICoqbGlzdCwgaW50IG4pIHsKICAgIHdoaWxlICgqbGlzdCAhPSBOVUxMKSB7CiAgICAgICAgaWYgKCgqbGlzdCktPnZhbHVlID09IG4pIHsKICAgICAgICAgICAgZnJlZV9ub2RlKGxpc3QpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgbGlzdCA9ICYoKCpsaXN0KS0+bmV4dCk7CiAgICB9Cn0KCmludCBtYWluKHZvaWQpIHsKCXN0cnVjdCBub2RlICpsaXN0ID0gTlVMTDsKCglmb3IoaW50IGkgPSA1OyBpID4gMDsgLS1pKSB7CgkJYWRkX3RvX2Zyb250X29mX2xpc3QoJmxpc3QsIGkpOwoJfQoKCWRpc3BsYXlfbGlzdChsaXN0KTsKCQoJZGVsZXRlX2Zyb21fbGlzdCgmbGlzdCwgMSk7CglkaXNwbGF5X2xpc3QobGlzdCk7CgoJZGVsZXRlX2Zyb21fbGlzdCgmbGlzdCwgMyk7CglkaXNwbGF5X2xpc3QobGlzdCk7CgoJZGVsZXRlX2Zyb21fbGlzdCgmbGlzdCwgNSk7CglkaXNwbGF5X2xpc3QobGlzdCk7CgoJcmV0dXJuIDA7Cn0=