Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Inserindo depois de um determinado nó em uma lista encadeada simples usando a linguagem CQuantidade de visualizações: 1454 vezes |
Inserindo depois de um determinado nó em uma lista encadeada simples usando C Em algumas situações nós precisamos inserir o novo nó depois de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores: 45 | 3 | 98 | 47 Suponha que queremos inserir o valor 50 depois do 98, então o novo conteúdo da lista será: 45 | 3 | 98 | 50 | 47 Observe que neste exemplo eu tratei o caso de inserir depois do primeiro nó, ou seja, depois do 45, mas não tratei a lista vazia. Há também a questão do erro de acesso de memória caso o usuário queira inserir depois de um nó não existente (não tratada). Veja o código completo: #include <stdio.h> #include <stdlib.h> // estrutura Nó struct No{ int valor; struct No *proximo; }; // fim da estrutura Nó // função que permite exibir os valores de // todos os nós da lista void exibir(struct No *n){ if(n != NULL){ do{ printf("%d\n", n->valor); n = n->proximo; }while(n != NULL); } else printf("A lista esta vazia\n\n"); } // função que permite inserir um novo nó // depois de um determinado valor struct No *inserir_depois_valor(struct No *n, int v, int v_depois){ // reserva memória para o novo nó struct No *novo = (struct No*)malloc(sizeof(struct No)); novo->valor = v; struct No *temp = n; // aponta para o início da lista // guarda o nó depois do nó atual struct No *depois = temp; // enquanto for diferente do valor que estamos procurando while(depois->valor != v_depois){ depois = temp; // depois recebe temp // e temp recebe o seu próximo temp = temp->proximo; } // ATENÇÃO: não estamos tratando a condição // de lista vazia. Para isso veja minha dica // sobre como inserior no início da lista // vamos inserir depois do primeiro nó if(depois == n){ // o próximo do novo nó aponta para // o segundo nó novo->proximo = n->proximo; // o primeiro nó aponta para o novo nó n->proximo = novo; } else{ // o proximo do anterior é o novo nó depois->proximo = novo; // e o próximo do novo nó é temp novo->proximo = temp; } return n; } // função que permite inserir nós no // final da lista. // veja que a função recebe o valor a ser // armazenado em cada nó e um ponteiro para o // início da lista. A função retorna um // ponteiro para o início da lista struct No *inserir_final(struct No *n, int v){ // reserva memória para o novo nó struct No *novo = (struct No*)malloc(sizeof(struct No)); novo->valor = v; // verifica se a lista está vazia if(n == NULL){ // é o primeiro nó...não deve apontar para |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
JavaScript - Como resolver uma equação do segundo grau em JavaScript - Como calcular Bhaskara em JavaScript |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |