Escreva uma função que copie uma lista encadeada para um vetor.

Passo 1

A questão pede para criar uma função que receba o ponteiro para o início de uma lista simplesmente encadeada e retorne um vetor (array) contendo os mesmos elementos da lista, na ordem. Vamos usar conceitos de estrutura de dados (lista encadeada) e alocação dinâmica de memória para vetores.

Passo 2

Primeiro, percorremos a lista uma vez para contar quantos nós ela possui. Isso é necessário para sabermos de quanto espaço precisamos alocar para o vetor.
Em seguida, alocamos um vetor de tamanho igual à quantidade de nós contados. Usamos malloc (ou equivalente) para criar esse vetor dinamicamente.
Depois, percorremos a lista uma segunda vez copiando o valor de cada nó para a posição correspondente no vetor. Mantemos um índice que começa em zero e incrementa a cada cópia.
Por fim, retornamos o vetor preenchido e, se desejado, também informamos o tamanho do vetor por meio de um parâmetro adicional.

Passo 3

Aqui está a implementação em C como exemplo:
typedef struct Node {
    int data;
    struct Node *next;
} Node;

int* copyListToArray(Node *head, int *outSize) {
    // Passo 1: contar quantidade de nós
    int count = 0;
    for (Node *p = head; p != NULL; p = p->next) {
        count++;
    }
    // Passo 2: alocar vetor
    int *array = malloc(count * sizeof(int));
    if (array == NULL) return NULL;  // falha na alocação
    // Passo 3: copiar elementos
    int i = 0;
    for (Node *p = head; p != NULL; p = p->next) {
        array[i++] = p->data;
    }
    // Passo 4: informar tamanho opcionalmente
    if (outSize != NULL) *outSize = count;
    return array;
}

Resposta

A função acima percorre a lista duas vezes — primeiro para contar e depois para copiar — aloca dinamicamente um vetor do tamanho exato e retorna esse vetor contendo os dados na mesma ordem da lista.

Exercícios relacionados