Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Como pesquisar um nó em uma lista ligada simples em C e retornar uma cópia do nó originalQuantidade de visualizações: 1405 vezes |
Nesta dica mostrarei como é possível buscar um nó em uma lista ligada simples (singly linked list) em C e retornar um novo nó como uma cópia do nó original, ou seja, alterações no conteúdo do nó retornado não afeta o nó original. Veja:----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
// função que permite pesquisar um nó na lista
// ligada e retornar o nó por cópia
struct No *pesquisar_no(int valor, struct No *inicio){
struct No *n = NULL; // declara um ponteiro para 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){
// reservamos memória para o nó
n = (struct No*)malloc(sizeof(struct No));
// copiamos o valor do nó temp
n->valor = temp->valor;
n->proximo = NULL; // não nos interessa
return n; // e retornamos
}
// não encontrei. vamos continuar a busca
temp = temp->proximo;
}while(temp != NULL);
}
else{
// a lista está vazia?
return n;
}
}
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: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
#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ó por cópia
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){
// reservamos memória para o nó
n = (struct No*)malloc(sizeof(struct No));
// copiamos o valor do nó temp
n->valor = temp->valor;
n->proximo = NULL; // não nos interessa
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;
// vamos fazer o último nó apontar para o nó recém-criado
temp->proximo = novo;
return n; // vamos retornar o início da lista intacto
}
}
int main(int argc, char *argv[])
{
// declara a lista
struct No *inicio = NULL;
// vamos inserir quatro valores no final
// da lista
inicio = inserir_final(inicio, 45);
inicio = inserir_final(inicio, 3);
inicio = inserir_final(inicio, 98);
inicio = inserir_final(inicio, 47);
// vamos pesquisar o nó com valor 98
struct No *pesquisa = pesquisar_no(98, inicio);
// o nó foi encontrado?
if(pesquisa != NULL){
printf("O no foi encontrado: %d",
pesquisa->valor);
}
else{
puts("O no nao foi encontrado.");
}
puts("\n\n");
system("pause");
return 0;
}
Ao executar esse código você terá o seguinte resultado: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- O nó foi encontrado: 98 Pressione qualquer tecla para continuar. . . |
|
|
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 |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |







