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;
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;
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;
}