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"); }