Dando continuidade ao estudo da estrutura lista encadeada, vamos nesta aula aprender como inserir no início de uma Lista Simplesmente Encadeada.
Assim como as outras estruturas estudadas, uma lista também precisa de uma estrutura Nó. Este Nó pode ter diversos campos de informação dos diversos tipos primitivos estudados como int, char, float ou double. Um Nó também pode ter em seu interior outras estruturas. Por fim, um Nó precisa obrigatoriamente de um ponteiro para uma estrutura do mesmo tipo, ou seja, um ponteiro para outro Nó.
Para este exemplo vamos desenvolver uma lista de números inteiros. Assim, o Nó de nossa lista terá apenas um campo inteiro e um ponteiro para o Nó seguinte, assim:
/* Estrutura Nó para a lista simplesmente encadeada */ typedef struct no{ int valor; struct no *proximo; }No;
O procedimento para inserir um novo elemento no início da lista é bastante simples. Como a variável lista será declarada na função main, precisamos receber o endereço dessa variável para conseguir alterar seu valor (ponteiro para ponteiro) e o elemento a ser inserido.
Dentro do procedimento é feita a alocação de memória para um novo Nó. Se a alocação de memória for feita com sucesso, então inserirmos o valor recebido como parâmetro, fazemos o ponteiro próximo apontar para o primeiro Nó da lista e, na sequência, precisamos alterar agora o início da lista, dizendo que este novo Nó é o novo início da lista, como feito a seguir:
/* Procedimento para inserir no início da lista */ void inserir_no_inicio(No **lista, int num){ No *novo = malloc(sizeof(No)); if(novo){ novo->valor = num; // preenche o campo valor novo->proximo = *lista; // o próximo do novo nó aponta para o início da lista *lista = novo; // o início da lista passa a ser o novo nó } else printf("Erro ao alocar memoria!\n"); }
Nas aulas seguintes veremos outras formas de inserção, remoção e impressão da nossa lista simplesmente encadeada. Não perca as próximas aulas.