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