Dando continuidade ao estudo da estrutura lista encadeada, vamos nesta aula aprender como inserir no fim de uma Lista Simplesmente Encadeada.
Esta aula é uma continuação da aula 243 onde criamos a estrutura Nó e fizemos a inserção no início.
Para inserir no final teremos basicamente duas possibilidades: quando a lista está vazia e quando a lista não está vazia.
Quando a lista está vazia é basicamente uma inserção no início. Alocamos memória, preenchemos o campo valor, setamos o ponteiro próximo para NULL e alteramos o início da lista para o novo nó recém criado.
/*
a lista está vazia?
*/
if(*lista == NULL)
*lista = novo;
Contudo, quando a lista não está vazia, então precisamos percorrer a lista até o último Nó para então fazer a inserção. Como não podemos alterar o conteúdo do início da lista (o ponteiro para a lista), criamos um ponteiro auxiliar e utilizamos este ponteiro para percorrer a lista até o último Nó. Quando a repetição for finalizada, indicando que atingimos o último Nó, podemos então fazer o ponteiro próximo do último Nó apontar para o novo Nó que está sendo inserido.
/*
inserção no final quando a lista não está vazia
*/
aux = *lista;
while(aux->proximo)
aux = aux->proximo;
aux->proximo = novo;
Nas aulas seguintes veremos como remover e imprimir a nossa lista encadeada.
Código completo em C para inserir um elemento no final da lista
/*
Procedimento para inserir no fim da lista
*/
void inserir_no_fim(No **lista, int num){
No *aux, *novo = malloc(sizeof(No));
if(novo){
novo->valor = num;
novo->proximo = NULL;
// é o primeiro?
if(*lista == NULL)
*lista = novo; // primeiro nó da lista
else{
aux = *lista;
while(aux->proximo) // caminha até o último nó da lista
aux = aux->proximo;
aux->proximo = novo;
}
}
else
printf("Erro ao alocar memoria!\n");
}
