#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
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;
}
Comments
0 B
|👍
/👎