/* Função que remove um valor numa determinada posição da lista. */ string LIS_Remover(Lista lista, int indice) { string menosum = "menosum"; if (indice > lista->tamanho || indice <= 0){ return menosum; } if(lista->tamanho == 0){ return menosum; } if (indice == 1){ return LIS_RemoverInicio(lista); } No no = lista->cabeca->proximo; while (--indice){ no = no->proximo; } string valorremovido = no->conteudo; no->anterior->proximo = no->proximo; no->proximo->anterior = no->anterior; DestruirNo(no); lista->tamanho--; return valorremovido; }
/** Função que libera a memória de uma instância da estrutura Lista, liberando a memória de todos os nós encadeados na lista, incluindo os nós cabeça e cauda. */ void LIS_Destruir(Lista lista) { No atual = lista->cabeca; while( atual != NULL ) { No destruido = atual; atual = atual->proximo; DestruirNo(destruido); } free(lista); }
/* Função que remove um valor no início da lista. @param lista - lista em que será feita a remoção @return retorna o valor do elemento removido. Retorna -1 caso a lista esteja vazia. */ int LIS_RemoverInicio(Lista lista) { if (lista->cabeca->proximo == lista->cauda) { return -1; } else{ No primeiro = lista->cabeca->proximo; lista->cabeca->proximo = primeiro->proximo; primeiro->proximo->anterior = lista->cabeca; int valorretirado = primeiro->valor; DestruirNo(primeiro); lista->tamanho--; return valorretirado; } }
/* Função que remove um valor no início da lista. */ string LIS_RemoverInicio(Lista lista) { string menosum = "menosum"; if (lista->cabeca->proximo == lista->cauda){ return menosum; } else{ No primeiro = lista->cabeca->proximo; lista->cabeca->proximo = primeiro->proximo; primeiro->proximo->anterior = lista->cabeca; string valorremovido = primeiro->conteudo; DestruirNo(primeiro); lista->tamanho--; return valorremovido; } }
/* Função que remove um valor no fim da lista. @param lista - lista em que será feita a remoção @return retorna o valor do elemento removido. Retorna -1 caso a lista esteja vazia. */ int LIS_RemoverFim(Lista lista) { if (lista->tamanho == 0){ return -1; } else{ No ultimo = lista->cauda->anterior; lista->cauda->anterior = ultimo->anterior; ultimo->anterior->proximo = lista->cauda; int valorremovido = ultimo->valor; DestruirNo(ultimo); lista->tamanho--; return valorremovido; } }