#include #include #include struct no { int valor; struct no *proximo; }; //visualize linked list struct lista { struct no *inicio; struct no *fim; }; void inserirInicio(struct lista *lista, int valor) { struct no *novoValor = malloc(sizeof(struct no)); novoValor->valor = valor; novoValor->proximo = NULL; if (lista->inicio == NULL) { lista->inicio = novoValor; lista->fim = novoValor; } else { novoValor->proximo = lista->inicio; lista->inicio = novoValor; } } void inserirFinal(struct lista *lista, int valor) { struct no *novoNo = malloc(sizeof(struct no)); novoNo->valor = valor; novoNo->proximo = NULL; if (lista->inicio == NULL) { lista->inicio = novoNo; lista->fim = novoNo; } else { lista->fim->proximo = novoNo; lista->fim = novoNo; } } void removerValor(struct lista *lista, int valor) { struct no *aux; struct no *auxAnterior = NULL; aux = lista->inicio; //Percorre até o final da lista ou até o achar o valor while (aux != NULL && aux->valor != valor) { auxAnterior = aux; aux = aux->proximo; } if (aux == NULL) { //Não achou printf("Não achou\n"); } else { if (lista->inicio == lista->fim) { //Só tem um elemento lista->inicio = NULL; lista->fim = NULL; } else if (lista->inicio == aux) { //Remover o inicio da lista lista->inicio = lista->inicio->proximo; //lista->inicio = aux->proximo; } else if (lista->fim == aux) { //Remove o ultimo elemento da lista lista->fim = auxAnterior; lista->fim->proximo = NULL; } else { //Remover do meio da lista auxAnterior->proximo = aux->proximo; aux->proximo = NULL; } free(aux); //Apaga espaço da memoria } } void listar(struct lista *lista) { struct no*aux; aux = lista->inicio; while(aux != NULL) { printf("%d\n", aux->valor); aux = aux->proximo; } } int main() { setlocale(LC_ALL, ""); struct lista *minhaLista = malloc(sizeof(struct lista)); minhaLista->inicio = NULL; minhaLista->fim = NULL; inserirInicio(minhaLista, 10); inserirInicio(minhaLista, 5); inserirFinal(minhaLista, 18); inserirFinal(minhaLista, 9); inserirInicio(minhaLista, 8); inserirInicio(minhaLista, 54); inserirFinal(minhaLista, 1); inserirInicio(minhaLista, 32); inserirFinal(minhaLista, 22); removerValor(minhaLista, 5); removerValor(minhaLista, 32); removerValor(minhaLista, 22); removerValor(minhaLista, 100); listar(minhaLista); return 0; }