ITEM 3(c)
Escreva uma função de nome buscaRemove que recebe um inteiro x e apontador ini para uma lista encadeada com cabeça e remove da lista todas as células que contêm x.
As soluções utilizam a abreviatura
struct celula {
int conteudo;
struct celula *prox;
}
typedef struct celula Celula;
ALGUMAS SOLUÇÕES ITERATIVAS void buscaRemove(int x, Celula *ini) { Celula *p; /* ponteiro para a celula anterior a que * esta sendo examinada */ Celula *q; /* ponteiro para a celula sendo examinada */ p = ini; q = p->prox; while (q != NULL) { if (q->conteudo == x) { p->prox = q->prox; free(q); } else p = q; q = p->prox; } } /* * Hmmm. * Nao gosto da versao abaixo... * Acho a versao anterior mais clara. */ void buscaRemove(int x, Celula *ini) { while (ini->prox != NULL) { if (ini->prox->conteudo == x) { Celula *p; /* ponteiro para a celula que sera removida */ p = ini->prox; ini->prox = ini->prox->prox; free(p); } else ini = ini->prox; } } ALGUMAS SOLUÇÕES RECURSIVAS void buscaRemove(int x, Celula *ini) { Celula *p; /* ponteiro para a celula sendo examinada */ if (ini->prox != NULL) /* lista nao esta vazia ? */ { p = ini->prox; if (p->conteudo == x) { ini->prox = p->prox; free(p); buscaRemove(x,ini); } else buscaRemove(x,ini->prox); } } void buscaRemove(int x, Celula *ini) { Celula *p; /* ponteiro para a celula sendo examinada */ if (ini->prox == NULL) return; /* lista esta vazia ? */ p = ini->prox; if (p->conteudo == x) { ini->prox = p->prox; free(p); buscaRemove(x,ini); } else buscaRemove(x,ini->prox); } void buscaRemove(int x, Celula *ini) { if (ini->prox != NULL) { if (ini->prox->conteudo == x) { struct celula *p = ini->prox; /* guarda end. da celula que sera removida */ ini->prox = ini->prox->prox; free(p); buscaRemove(x,ini); } else buscaRemove(x, ini->prox); } } void buscaRemove(int x, Celula *ini) { if (ini->prox == NULL) return; if (ini->prox->conteudo == x) { struct celula *p = ini->prox; /* guarda end. da celula que sera removida */ ini->prox = ini->prox->prox; free(p); buscaRemove(x,ini); } else buscaRemove(x, ini->prox); }