#include <stdio.h>
#include <stdlib.h>
struct node
{
int key;
struct node *next;
};
void add(struct node **root,int key)
{
struct node
*temp
=(struct node
*)malloc(sizeof(struct node
)); temp->key=key;
temp->next=*root;
*root=temp;
}
void rem(struct node **root,int key)
{
struct node *temp,**curr;
for(curr=root;*curr;curr=&(*curr)->next)
{
if((*curr)->key==key)
{
temp=*curr;
*curr=temp->next;
break;
}
}
}
void destroy(struct node *root)
{
struct node *temp;
while(root)
{
temp=root;
root=root->next;
}
}
void show(struct node *list)
{
for(;list
;list
=list
->next
) printf(" %d",list
->key
); }
int main()
{
struct node *list=NULL;
add(&list,12); show(list);
add(&list,14); show(list);
add(&list,16); show(list);
rem(&list,16); show(list);
rem(&list,12); show(list);
rem(&list,14); show(list);
destroy(list);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIApzdHJ1Y3Qgbm9kZQogIHsKICAgaW50IGtleTsKICAgc3RydWN0IG5vZGUgKm5leHQ7CiAgfTsKCnZvaWQgYWRkKHN0cnVjdCBub2RlICoqcm9vdCxpbnQga2V5KQogIHsKICAgc3RydWN0IG5vZGUgKnRlbXA9KHN0cnVjdCBub2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBub2RlKSk7CiAgIHRlbXAtPmtleT1rZXk7CiAgIHRlbXAtPm5leHQ9KnJvb3Q7CiAgICpyb290PXRlbXA7CiAgfQoKdm9pZCByZW0oc3RydWN0IG5vZGUgKipyb290LGludCBrZXkpCiAgewogICBzdHJ1Y3Qgbm9kZSAqdGVtcCwqKmN1cnI7CiAgIGZvcihjdXJyPXJvb3Q7KmN1cnI7Y3Vycj0mKCpjdXJyKS0+bmV4dCkKICAgICB7CiAgICAgIGlmKCgqY3VyciktPmtleT09a2V5KQogICAgICAgIHsKICAgICAgICAgdGVtcD0qY3VycjsKICAgICAgICAgKmN1cnI9dGVtcC0+bmV4dDsKICAgICAgICAgZnJlZSh0ZW1wKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgIH0KICB9Cgp2b2lkIGRlc3Ryb3koc3RydWN0IG5vZGUgKnJvb3QpCiAgewogICBzdHJ1Y3Qgbm9kZSAqdGVtcDsKICAgd2hpbGUocm9vdCkKICAgICB7CiAgICAgIHRlbXA9cm9vdDsKICAgICAgcm9vdD1yb290LT5uZXh0OwogICAgICBmcmVlKHRlbXApOwogICAgIH0KICB9CiAgCnZvaWQgc2hvdyhzdHJ1Y3Qgbm9kZSAqbGlzdCkKICB7CiAgIHByaW50ZigieyIpOwogICBmb3IoO2xpc3Q7bGlzdD1saXN0LT5uZXh0KSBwcmludGYoIiAlZCIsbGlzdC0+a2V5KTsKICAgcHJpbnRmKCIgfVxuIik7CiAgfQogIAppbnQgbWFpbigpCiAgewogICBzdHJ1Y3Qgbm9kZSAqbGlzdD1OVUxMOwogICBhZGQoJmxpc3QsMTIpOyBzaG93KGxpc3QpOwogICBhZGQoJmxpc3QsMTQpOyBzaG93KGxpc3QpOwogICBhZGQoJmxpc3QsMTYpOyBzaG93KGxpc3QpOwogCiAgIHJlbSgmbGlzdCwxNik7IHNob3cobGlzdCk7CiAgIHJlbSgmbGlzdCwxMik7IHNob3cobGlzdCk7CiAgIHJlbSgmbGlzdCwxNCk7IHNob3cobGlzdCk7CiAKICAgZGVzdHJveShsaXN0KTsKICAgcmV0dXJuIDA7CiAgfQ==