aula 244

Como inserir no fim de uma Lista Simplesmente Encadeada?

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

Deixe um comentário

5 + 16 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.