#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
struct node *push(struct node *list, int value) {
struct node
*prev
= malloc(sizeof *list
); prev->value = value;
prev->next = list;
return prev;
}
struct node *pop(struct node *list, int *value) {
struct node *next = list->next;
*value = list->value;
return next;
}
void each(void (*f)(int), struct node *p) {
for (; p; p = p->next) f(p->value);
}
void print_int
(int x
) {printf("%d", x
);} int main() {
struct node *list;
int a, b, c;
each(print_int, list = push(push(push(NULL, 1), 2), 3));
printf("\n%d%d%d%d", a
, b
, c
, list
= pop
(pop
(pop
(list
, &a
), &b
), &c
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4Kc3RydWN0IG5vZGUgewogIGludCB2YWx1ZTsKICBzdHJ1Y3Qgbm9kZSAqbmV4dDsKfTsKc3RydWN0IG5vZGUgKnB1c2goc3RydWN0IG5vZGUgKmxpc3QsIGludCB2YWx1ZSkgewogIHN0cnVjdCBub2RlICpwcmV2ID0gbWFsbG9jKHNpemVvZiAqbGlzdCk7CiAgcHJldi0+dmFsdWUgPSB2YWx1ZTsKICBwcmV2LT5uZXh0ID0gbGlzdDsKICByZXR1cm4gcHJldjsKfQpzdHJ1Y3Qgbm9kZSAqcG9wKHN0cnVjdCBub2RlICpsaXN0LCBpbnQgKnZhbHVlKSB7CiAgc3RydWN0IG5vZGUgKm5leHQgPSBsaXN0LT5uZXh0OwogICp2YWx1ZSA9IGxpc3QtPnZhbHVlOwogIGZyZWUobGlzdCk7CiAgcmV0dXJuIG5leHQ7Cn0Kdm9pZCBlYWNoKHZvaWQgKCpmKShpbnQpLCBzdHJ1Y3Qgbm9kZSAqcCkgewogIGZvciAoOyBwOyBwID0gcC0+bmV4dCkgZihwLT52YWx1ZSk7Cn0Kdm9pZCBwcmludF9pbnQoaW50IHgpIHtwcmludGYoIiVkIiwgeCk7fQppbnQgbWFpbigpIHsKICBzdHJ1Y3Qgbm9kZSAqbGlzdDsKICBpbnQgYSwgYiwgYzsKICBlYWNoKHByaW50X2ludCwgbGlzdCA9IHB1c2gocHVzaChwdXNoKE5VTEwsIDEpLCAyKSwgMykpOwogIHByaW50ZigiXG4lZCVkJWQlZCIsIGEsIGIsIGMsIGxpc3QgPSBwb3AocG9wKHBvcChsaXN0LCAmYSksICZiKSwgJmMpKTsKICByZXR1cm4gMDsKfQo=