Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Pesquisando um nó em uma lista ligada simples em C e retornando um ponteiro para o nó encontradoQuantidade de visualizações: 1108 vezes |
Nesta dica mostrarei como é possível buscar um nó em uma lista ligada simples (singly linked list) em C e retornar um ponteiro para o nó encontrado, ou seja, alterações no conteúdo do nó retornado afetarão também o nó original. Veja:// função que permite pesquisar um nó na lista // ligada e retornar o nó como referência struct No *pesquisar_no(int valor, struct No *inicio) { struct No *n = NULL; // declara um novo nó struct No *temp = inicio; // aponta para o início da lista if (temp != NULL) { do { // é o valor que estamos buscando? if (temp->valor == valor) { // retornamos um ponteiro para o nó encontrado n = temp; return n; // e retornamos Veja que a função recebe como argumentos o valor a ser pesquisado e um ponteiro para o início da lista, e ela retorna um ponteiro para o nó encontrado, ou NULL caso o valor pesquisado não for encontrado. Veja a listagem completa abaixo: #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 pesquisar um nó na lista // ligada e retornar o nó como referência struct No *pesquisar_no(int valor, struct No *inicio) { struct No *n = NULL; // declara um novo nó struct No *temp = inicio; // aponta para o início da lista if (temp != NULL) { do { // é o valor que estamos buscando? if (temp->valor == valor) { // retornamos um ponteiro para o nó encontrado n = temp; return n; // e retornamos } // não encontrei. vamos continuar a busca temp = temp->proximo; } while (temp != NULL); } else { // a lista está vazia? 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 // lugar nenhum novo->proximo = NULL; return novo; // vamos retornar o novo nó como sendo o início da lista } else { // não está vazia....vamos inserir o nó no final // o primeiro passo é chegarmos ao final da lista struct No *temp = n; // vamos obter uma referência ao primeiro nó // vamos varrer a lista até chegarmos ao último nó while (temp->proximo != NULL) { temp = temp->proximo; } // na saída do laço temp aponta para o último nó da lista // novo será o último nó da lista...o campo próximo dele deve // apontar para NULL novo->proximo = NULL; Ao executar esse código você terá o seguinte resultado: 45 3 98 47 O nó foi encontrado: 98 De fato podemos ver que o valor 98 foi substituído por 350, o que confirma que o nó realmente foi obtido por referência e não por cópia. |
![]() |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
AutoCAD Civil 3D .NET C# - Como retornar a quantidade de perfis de um alinhamento do Civil 3D usando a função GetProfileIds() da API C# do AutoCAD Civil 3D CSS - Como definir uma imagem de fundo para um botão HTML usando a propriedade background-image do CSS |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |