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

Pesquisando um nó em uma lista ligada simples em C e retornando um ponteiro para o nó encontrado

Quantidade 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.

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á 30 usuários muito felizes estudando em nosso site.