#include <stdio.h>
#include <stdlib.h>
/* Estrutura de um noh de uma lista encadeada */
typedef struct no {
int info;
struct no * prox;
} tipoNo;
/* Percorre a lista (travessia), imprimindo seus elementos */
void imprimir( tipoNo * lst) {
tipoNo * p;
p = lst-> prox;
while ( p != NULL) {
p = p-> prox;
}
}
/* Funcao para liberar espaco alocado via malloc
* para cada um dos elementos de uma lista encadeada */
void liberar( tipoNo* lst) {
tipoNo * f; /* Ponteiro auxiliar */
/* Faz a travessia da lista ateh encontrar o ultimo item. */
while ( lst != NULL) {
f = lst;
lst = lst-> prox;
}
}
/* Insere noh em uma lista encadeada */
void inserir( tipoNo * p, int y) {
tipoNo * novonoh; /* Novo noh */
novonoh
= ( tipoNo
* ) malloc ( sizeof ( tipoNo
) ) ; /* Aloca espaco para novo noh */
novonoh-> info = y; /* Armazena valor do novo noh */
novonoh-> prox = p-> prox; /* Ajusta o campo prox do novo noh */
p-> prox = novonoh; /* Faz o noh antigo apontar para o novo noh */
}
/* Esta função recebe uma lista encadeada lst,
* com cabeça, e remove da lista a primeira
* celula que contiver 'x', se tal celula existir. */
void buscarremover( tipoNo * lst, int y) {
tipoNo * p, * q;
p = lst;
q = lst-> prox;
while ( q != NULL && q-> info != y) {
p = q;
q = q-> prox;
}
if ( q != NULL) {
p-> prox = q-> prox;
}
}
/* Funcao principal */
int main( ) {
printf ( "==========================================\n " ) ; printf ( " INSERCAO de item em uma lista encadeada \n " ) ; printf ( "==========================================\n " ) ;
/* Declaracao de **ponteiros** para os nohs da lista encadeada */
tipoNo * lista, * pt;
/* Criacao do noh cabeca */
lista
= ( tipoNo
* ) malloc ( sizeof ( tipoNo
) ) ; lista-> prox = NULL;
/* Inicializa Lista Encadeada */
inserir( lista, 76 ) ;
inserir( lista, 34 ) ;
inserir( lista, 65 ) ;
inserir( lista, 45 ) ;
/* Imprime Lista ORIGINAL, *ANTES* da remocao */
imprimir( lista) ;
/* Busca e remocao do elemento 34 */
buscarremover( lista, 34 ) ;
imprimir( lista) ;
/* Busca e remocao do elemento 88 (nao existe) */
buscarremover( lista, 88 ) ;
imprimir( lista) ;
/* Destroi lista encadeada, liberando espaco */
liberar( lista) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8qIEVzdHJ1dHVyYSBkZSB1bSBub2ggZGUgdW1hIGxpc3RhIGVuY2FkZWFkYSAqLwp0eXBlZGVmIHN0cnVjdCBubyB7CiAgICBpbnQgICAgICAgaW5mbzsKICAgIHN0cnVjdCBubyAqcHJveDsKfSB0aXBvTm87CgoKLyogUGVyY29ycmUgYSBsaXN0YSAodHJhdmVzc2lhKSwgaW1wcmltaW5kbyBzZXVzIGVsZW1lbnRvcyAqLwp2b2lkIGltcHJpbWlyKHRpcG9ObyAqbHN0KSB7CiAgICB0aXBvTm8gKnA7CiAgICBwID0gbHN0LT5wcm94OwoKICAgIHdoaWxlIChwICE9IE5VTEwpIHsKICAgICAgIHByaW50ZigiJTRkIiwgcC0+aW5mbyk7CiAgICAgICBwID0gcC0+cHJveDsKICAgIH0KCiAgICBwcmludGYoIlxuIik7Cn0KCi8qIEZ1bmNhbyBwYXJhIGxpYmVyYXIgZXNwYWNvIGFsb2NhZG8gdmlhIG1hbGxvYwogKiBwYXJhIGNhZGEgdW0gZG9zIGVsZW1lbnRvcyBkZSB1bWEgbGlzdGEgZW5jYWRlYWRhICovCnZvaWQgbGliZXJhcih0aXBvTm8qIGxzdCkgewogICAgdGlwb05vICpmOyAgICAgICAgIC8qIFBvbnRlaXJvIGF1eGlsaWFyICovCgogICAgLyogRmF6IGEgdHJhdmVzc2lhIGRhIGxpc3RhIGF0ZWggZW5jb250cmFyIG8gdWx0aW1vIGl0ZW0uICovCiAgICB3aGlsZSAobHN0ICE9IE5VTEwpIHsKICAgICAgICBmICAgICA9IGxzdDsKICAgICAgICBsc3QgPSBsc3QtPnByb3g7CiAgICAgICAgZnJlZShmKTsKICAgIH0KfQoKLyogSW5zZXJlIG5vaCBlbSB1bWEgbGlzdGEgZW5jYWRlYWRhICovCnZvaWQgaW5zZXJpcih0aXBvTm8gKnAsIGludCB5KSB7CiAgICB0aXBvTm8gKm5vdm9ub2g7ICAgICAgIC8qIE5vdm8gbm9oICovCgogICAgbm92b25vaCA9ICh0aXBvTm8qKSBtYWxsb2Moc2l6ZW9mKHRpcG9ObykpOyAgIC8qIEFsb2NhIGVzcGFjbyBwYXJhIG5vdm8gbm9oICovCgogICAgbm92b25vaC0+aW5mbyA9IHk7ICAgICAgICAgLyogQXJtYXplbmEgdmFsb3IgZG8gbm92byBub2ggKi8KICAgIG5vdm9ub2gtPnByb3ggPSBwLT5wcm94OyAgIC8qIEFqdXN0YSBvIGNhbXBvIHByb3ggZG8gbm92byBub2ggKi8KICAgIHAtPnByb3ggPSBub3Zvbm9oOyAgICAgICAgIC8qIEZheiBvIG5vaCBhbnRpZ28gYXBvbnRhciBwYXJhIG8gbm92byBub2ggKi8KfQoKLyogRXN0YSBmdW7Dp8OjbyByZWNlYmUgdW1hIGxpc3RhIGVuY2FkZWFkYSBsc3QsCiAqIGNvbSBjYWJlw6dhLCBlIHJlbW92ZSBkYSBsaXN0YSBhIHByaW1laXJhCiAqIGNlbHVsYSBxdWUgY29udGl2ZXIgJ3gnLCBzZSB0YWwgY2VsdWxhIGV4aXN0aXIuICovCnZvaWQgYnVzY2FycmVtb3Zlcih0aXBvTm8gKmxzdCwgaW50IHkpIHsKICAgdGlwb05vICpwLCAqcTsKICAgcCA9IGxzdDsKICAgcSA9IGxzdC0+cHJveDsKICAgd2hpbGUgKHEgIT0gTlVMTCAmJiBxLT5pbmZvICE9IHkpIHsKICAgICAgcCA9IHE7CiAgICAgIHEgPSBxLT5wcm94OwogICB9CiAgIGlmIChxICE9IE5VTEwpIHsKICAgICAgcC0+cHJveCA9IHEtPnByb3g7CiAgICAgIGZyZWUocSk7CiAgIH0KfQoKLyogRnVuY2FvIHByaW5jaXBhbCAqLwppbnQgbWFpbigpIHsKCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKCXByaW50ZigiIElOU0VSQ0FPIGRlIGl0ZW0gZW0gdW1hIGxpc3RhIGVuY2FkZWFkYSAgXG4iKTsKCXByaW50ZigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKCXByaW50ZigiXG4iKTsKCiAgICAvKiBEZWNsYXJhY2FvIGRlICoqcG9udGVpcm9zKiogcGFyYSBvcyBub2hzIGRhIGxpc3RhIGVuY2FkZWFkYSAqLwogICAgdGlwb05vICpsaXN0YSwgKnB0OwoKICAgIC8qIENyaWFjYW8gZG8gbm9oIGNhYmVjYSAqLwogICAgbGlzdGEgPSAodGlwb05vKikgbWFsbG9jKHNpemVvZih0aXBvTm8pKTsKICAgIGxpc3RhLT5wcm94ID0gTlVMTDsKCiAgICAvKiBJbmljaWFsaXphIExpc3RhIEVuY2FkZWFkYSAqLwogICAgaW5zZXJpcihsaXN0YSwgNzYpOwogICAgaW5zZXJpcihsaXN0YSwgMzQpOwogICAgaW5zZXJpcihsaXN0YSwgNjUpOwogICAgaW5zZXJpcihsaXN0YSwgNDUpOwoKICAgIC8qIEltcHJpbWUgTGlzdGEgT1JJR0lOQUwsICpBTlRFUyogZGEgcmVtb2NhbyAqLwogICAgaW1wcmltaXIobGlzdGEpOwoKICAgIC8qIEJ1c2NhIGUgcmVtb2NhbyBkbyBlbGVtZW50byAzNCAqLwogICAgYnVzY2FycmVtb3ZlcihsaXN0YSwgMzQpOwogICAgaW1wcmltaXIobGlzdGEpOwoKICAgIC8qIEJ1c2NhIGUgcmVtb2NhbyBkbyBlbGVtZW50byA4OCAobmFvIGV4aXN0ZSkgKi8KICAgIGJ1c2NhcnJlbW92ZXIobGlzdGEsIDg4KTsKICAgIGltcHJpbWlyKGxpc3RhKTsKCiAgICAvKiBEZXN0cm9pIGxpc3RhIGVuY2FkZWFkYSwgbGliZXJhbmRvIGVzcGFjbyAqLwogICAgbGliZXJhcihsaXN0YSk7CgoJcmV0dXJuIDA7Cn0=