Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Como inserir nós na posição n de uma lista ligada simples em CQuantidade de visualizações: 603 vezes |
Nesta dica eu mostrarei um código C completo mostrando como podemos inserir um novo nó em uma determinada posição de uma lista encadeada simples. Note o uso das funções criar_lista(), inserir_no_posicao_n() e exibir_lista(). Para a demonstração eu usei uma estrutura No com apenas um valor inteiro e um ponteiro para o próximo elemento da lista. Após o entendimento do código você poderá modificar a estrutura No para o problema que você deseja resolver. Veja o código C completo para o exemplo: ---------------------------------------------------------------------- Precisa de ajuda? Chama no WhatsApp +55 (62) 98553-6711 (Osmar) Este código foi útil? Paga um cafezinho pra mim :-( PIX: osmar@arquivodecodigos.com.br ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> // estrutura que representa os nós da lista struct No{ // variável que guarda o valor do nó int valor; // aponta para o próximo nó da lista struct No *proximo; } *inicio; // cabeçalhos das funções usadas neste exemplo void criar_lista(int quant_nos); void inserir_no_posicao_n(int valor, int posicao); void exibir_lista(); // função principal do programa int main(int argc, char *argv[]){ // variáveis que serão usadas no programa int quantidade, posicao, valor; setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar a quantidade de nós // na lista ligada printf("Informe a quantidade de nós: "); scanf("%d", &quantidade); // chama a função que cria a lista ligada criar_lista(quantidade); // exibe os nós da lista ligada exibir_lista(); // vamos pedir para o usuário informar a posição do novo nó printf("\n\nInforme a posição do novo nó: "); scanf("%d", &posicao); printf("Informe o valor do novo nó: "); scanf("%d", &valor); // chama a função que insere na posição n inserir_no_posicao_n(valor, posicao); // exibe os nós da lista ligada novamente exibir_lista(); printf("\n\n"); system("PAUSE"); return 0; } // função que permite exibir os nós na lista ligada void exibir_lista(){ // criamos um nó temporário struct No *temp; // a lista está vazia? if(inicio == NULL){ printf("\nA lista está vazia\n"); } else{ printf("\nOs nós na lista ligada são:\n\n"); // apontamos para o primeiro nó da lista temp = inicio; // enquanto início for diferente de vazia while(temp != NULL){ // mostramos o valor do nó atual printf("%d ", temp->valor); // e saltamos para o nó seguinte temp = temp->proximo; } } } // função que permite criar a lista ligada void criar_lista(int quant_nos){ // decara o novo nó e o nó temporário struct No *novo_no, *temp; // valor do nó e a variável de controle do laço int valor, i; // o primeiro passo é alocar memória para o nó inicial da lista inicio = (struct No*)malloc(sizeof(struct No)); // a memória foi alocada com sucesso? if(inicio == NULL){ printf("\nNão foi possível alocar memória para o nó.\n"); } else{ // vamos pedir para o usuário informar o valor para o // primeiro nó da lista printf("Informe o valor para o Nó 1: "); scanf("%d", &valor); // preenchemos o valor do nó inicio->valor = valor; // o nó inicial não aponta para nenhum outro até o momento inicio->proximo = NULL; // agora fazemos o nó temporário apontar para o nó inicial temp = inicio; // criamos os demais nós e os adicionamos na lista ligada for(i = 2; i <= quant_nos; i++){ // alocamos memória para o novo nó novo_no = (struct No*)malloc(sizeof(struct No)); // testamos se a memória foi alocada com sucesso if(novo_no == NULL){ printf("\nNão foi possível alocar memória para o novo nó.\n"); break; } else{ // pedimos para o usuário informar o valor do novo nó printf("Informe o valor para o nó %d: ", i); scanf("%d", &valor); // guardamos o valor no novo nó novo_no->valor = valor; // o novo nó não está apontando para nenhum outro por enquanto novo_no->proximo = NULL; // o nó temp aponta para o próximo nó temp->proximo = novo_no; // e temp passa a ser o nó recém inserido temp = temp->proximo; } } // mostramos uma mensagem de sucesso printf("\nA lista ligada foi criada com sucesso.\n"); } } // função que permite inserir um nó em uma determinada // posição da lista ligada void inserir_no_posicao_n(int valor, int posicao){ // para controlar o laço int i; // para o novo nó e o nó temporário struct No *novo_no, *temp; // alocamos memória para o novo nó novo_no = (struct No*)malloc(sizeof(struct No)); // testamos se a memória foi alocada com sucesso if(novo_no == NULL){ printf("\nNão foi possível alocar memória para o novo nó.\n"); } else{ // guardamos o valor no novo nó novo_no->valor = valor; // o novo nó não está apontando para nenhum outro por enquanto novo_no->proximo = NULL; // agora apontamos temp para o início da lista temp = inicio; // e percorremos a lista até encontrar a posição desejada for(i = 2; i <= posicao - 1; i++){ // apontamos para o próximo nó do nó atual temp = temp->proximo; // saímos do laço se chegarmos ao fim da lista if(temp == NULL){ break; } } // encontramos a posição desejada? if(temp != NULL){ // o novo nó aponta para o próximo do nó temporário novo_no->proximo = temp->proximo; // e o próximo do temporário agora aponta para o novo nó temp->proximo = novo_no; // finalmente mostramos uma mensagem de sucesso printf("\nNovo nó inserido com sucesso.\n"); } else{ printf("\nNão foi possível inserir na posição informada\n"); } } } Ao executar este código C nós teremos o seguinte resultado: Informe a quantidade de nós: 4 Informe o valor para o Nó 1: 34 Informe o valor para o nó 2: 21 Informe o valor para o nó 3: 40 Informe o valor para o nó 4: 17 A lista ligada foi criada com sucesso. Os nós na lista ligada são: 34 21 40 17 Informe a posição do novo nó: 3 Informe o valor do novo nó: 58 Novo nó inserido com sucesso. Os nós na lista ligada são: 34 21 58 40 17 |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Python - Como calcular o volume de chuvas em Python - Fórmula do cálculo do volume de chuvas em Python |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |