Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples

Como inserir nós na posição n de uma lista ligada simples em C

Quantidade 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

Link para compartilhar na Internet ou com seus amigos:

Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 28 usuários muito felizes estudando em nosso site.