#include <stdio.h>
#include <stdlib.h>
struct no {
int data;
struct no *prox;
};
void finaliza_recursivo(struct no **inicio) {
if (*inicio != NULL) finaliza_recursivo(&(*inicio)->prox);
*inicio = NULL;
}
void cria(struct no **inicio) {
*inicio = NULL;
}
void inserir (struct no **inicio, int *valor, int *erro) {
struct no *tmp;
*erro = 1; /* assume que vai haver erro */
if (tmp != NULL) {
*erro = 0; /* afinal nao houve erro */
tmp->data = *valor;
tmp->prox = *inicio;
*inicio = tmp;
}
}
void imprimir(struct no *inicio, const char *msg) {
int empty = 1;
while (inicio) {
inicio = inicio->prox;
empty = 0;
}
puts(empty
? " (lista vazia)" : ""); }
int main(void) {
struct no *ini; /* e um ponteiro para um bloquinho (inicio da lista) */
int x;
int erro;
cria(&ini);
imprimir(ini, "recem criada");
x = 2;
inserir(&ini, &x, &erro);
imprimir(ini, "depois de inserir 2");
x = 3;
inserir(&ini, &x, &erro);
imprimir(ini, "depois de inserir 3");
x = 8;
inserir(&ini, &x, &erro);
imprimir(ini, "depois de inserir 8");
finaliza_recursivo(&ini);
imprimir(ini, "depois de finaliza_recursivo");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBubyB7CiAgaW50IGRhdGE7CiAgc3RydWN0IG5vICpwcm94Owp9OwoKdm9pZCBmaW5hbGl6YV9yZWN1cnNpdm8oc3RydWN0IG5vICoqaW5pY2lvKSB7CiAgaWYgKCppbmljaW8gIT0gTlVMTCkgZmluYWxpemFfcmVjdXJzaXZvKCYoKmluaWNpbyktPnByb3gpOwogIGZyZWUoKmluaWNpbyk7CiAgKmluaWNpbyA9IE5VTEw7Cn0KCnZvaWQgY3JpYShzdHJ1Y3Qgbm8gKippbmljaW8pIHsKICAqaW5pY2lvID0gTlVMTDsKfQoKdm9pZCBpbnNlcmlyIChzdHJ1Y3Qgbm8gKippbmljaW8sIGludCAqdmFsb3IsIGludCAqZXJybykgewogIHN0cnVjdCBubyAqdG1wOwogIHRtcCA9IG1hbGxvYyhzaXplb2YgKnRtcCk7CiAgKmVycm8gPSAxOyAvKiBhc3N1bWUgcXVlIHZhaSBoYXZlciBlcnJvICovCiAgaWYgKHRtcCAhPSBOVUxMKSB7CiAgICAqZXJybyA9IDA7IC8qIGFmaW5hbCBuYW8gaG91dmUgZXJybyAqLwogICAgdG1wLT5kYXRhID0gKnZhbG9yOwogICAgdG1wLT5wcm94ID0gKmluaWNpbzsKICAgICppbmljaW8gPSB0bXA7CiAgfQp9Cgp2b2lkIGltcHJpbWlyKHN0cnVjdCBubyAqaW5pY2lvLCBjb25zdCBjaGFyICptc2cpIHsKICBpbnQgZW1wdHkgPSAxOwogIGlmIChtc2cpIHByaW50ZigiJXM6IiwgbXNnKTsKICB3aGlsZSAoaW5pY2lvKSB7CiAgICBwcmludGYoIiAlZCIsIGluaWNpby0+ZGF0YSk7CiAgICBpbmljaW8gPSBpbmljaW8tPnByb3g7CiAgICBlbXB0eSA9IDA7CiAgfQogIHB1dHMoZW1wdHkgPyAiIChsaXN0YSB2YXppYSkiIDogIiIpOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBzdHJ1Y3Qgbm8gKmluaTsgLyogZSB1bSBwb250ZWlybyBwYXJhIHVtIGJsb3F1aW5obyAoaW5pY2lvIGRhIGxpc3RhKSAqLwogICAgaW50IHg7CiAgICBpbnQgZXJybzsKCiAgICBjcmlhKCZpbmkpOwoKICAgIGltcHJpbWlyKGluaSwgInJlY2VtIGNyaWFkYSIpOwoKICAgIHggPSAyOwogICAgaW5zZXJpcigmaW5pLCAmeCwgJmVycm8pOwogICAgaW1wcmltaXIoaW5pLCAiZGVwb2lzIGRlIGluc2VyaXIgMiIpOwogICAgeCA9IDM7CiAgICBpbnNlcmlyKCZpbmksICZ4LCAmZXJybyk7CiAgICBpbXByaW1pcihpbmksICJkZXBvaXMgZGUgaW5zZXJpciAzIik7CiAgICB4ID0gODsKICAgIGluc2VyaXIoJmluaSwgJngsICZlcnJvKTsKICAgIGltcHJpbWlyKGluaSwgImRlcG9pcyBkZSBpbnNlcmlyIDgiKTsKCiAgICBmaW5hbGl6YV9yZWN1cnNpdm8oJmluaSk7CiAgICBpbXByaW1pcihpbmksICJkZXBvaXMgZGUgZmluYWxpemFfcmVjdXJzaXZvIik7CgogICAgcmV0dXJuIDA7Cn0K