/* Implementacao melhor que a vista em aula */ p_no destroi_lista_iter(p_no lista) { p_no p = lista, aux; while (p != NULL) { aux = p->prox; free(p); p = aux; } } p_no busca(p_no lista, int x){ if (lista == NULL || lista->dado == x) return lista; return busca(lista->prox, x); } p_no busca_iter(p_no lista, int x){ p_no p = lista; while (p != NULL) if (p->dado == x) return p; else p = p->prox; return NULL; } p_no busca_e_remove(p_no lista, int x){ p_no p; if (lista == NULL) return NULL; if (lista->dado == x) { p = lista->prox; free(lista); return p; } else { lista->prox = busca_e_remove(lista->prox, x); return lista; } } p_no busca_e_remove_iter(p_no lista, int x){ p_no ant, atual; if (lista->dado == x) { atual = lista->prox; free(lista); return atual; } else { ant = lista; atual = lista->prox; while (atual != NULL && atual->dado != x) { ant = atual; atual = atual->prox; } if (atual != NULL) { ant = atual->prox; free(atual); return lista; } } } p_no busca_e_remove_todos(p_no lista, int x){ /* Exercicio! */ }