Escreva uma função que crie uma lista encadeada a partir de um vetor.

Passo 1

Resumo do enunciado: queremos escrever uma função que, dado um vetor de elementos e seu tamanho, construa dinamicamente uma lista simplesmente encadeada contendo esses elementos na mesma ordem. O conteúdo envolvido é Estruturas de Dados — lista ligada — e vamos precisar entender nó, ponteiro e alocação dinâmica.

Passo 2

Definir a estrutura de nó: cada elemento da lista será um nó contendo um campo para armazenar o valor do vetor e um ponteiro para o próximo nó. Em C fazemos isso com:
Criar e inicializar os ponteiros de controle: vamos manter dois ponteiros principais, um para o início da lista (head) e outro para o fim da lista (tail), ambos inicialmente NULL.

Passo 3

Percorrer o vetor e alocar nós: para cada elemento do vetor, usamos malloc para criar um novo nó, atribuímos o valor ao campo data e definimos o next como NULL.
Inserir o novo nó na lista: se a lista estiver vazia (head == NULL), atribuiremos head e tail ao novo nó; caso contrário, ligamos tail->next ao novo nó e atualizamos tail para apontar para esse nó, garantindo inserção ao final em tempo constante.

Passo 4

Retornar o ponteiro head: ao final do laço teremos uma lista encadeada contendo todos os elementos do vetor; basta devolver head como referência ao início da lista.

Resposta

#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
// Função que cria uma lista simplesmente encadeada a partir de um vetor
Node* createLinkedList(int arr[], int n) {
Node *head = NULL;
Node *tail = NULL;
for (int i = 0; i < n; i++) {
    // Aloca um novo nó
    Node *newNode = (Node*) malloc(sizeof(Node));
    if (newNode == NULL) {
        // Falha na alocação de memória
        return head;
    }
    newNode->data = arr[i];
    newNode->next = NULL;

    if (head == NULL) {
        // Primeira inserção: nova lista
        head = newNode;
        tail = newNode;
    } else {
        // Insere no final da lista existente
        tail->next = newNode;
        tail = newNode;
    }
}

return head;
}

Exercícios relacionados