Faça uma função para remover os n primeiros elementos de uma lista. A função deve retornar se a operação foi possível ou não.

Passo 1

O enunciado pede uma função em C que receba um ponteiro para a cabeça de uma lista simplesmente encadeada e um inteiro n, remova os n primeiros nós e retorne se deu para fazer isso.

Passo 2

Antes de apagar qualquer nó, percorremos a lista com um ponteiro auxiliar p para checar se existem pelo menos n elementos. Se durante esse percurso p ficar NULL antes de completar n passos, sabemos que não há elementos suficientes e retornamos false sem alterar a lista.

Passo 3

Se passarmos da verificação, fazemos um segundo laço que itera n vezes: em cada iteração guardamos o nó atual em temp, avançamos head para o próximo nó e liberamos temp com free, removendo efetivamente o nó da lista.

Passo 4

Ao final da remoção dos n nós temos *head apontando para o novo primeiro elemento; então retornamos true para indicar sucesso.

Resposta

#include <stdlib.h>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
bool remove_first_n(Node** head, int n) {
Node* p = head;
for (int i = 0; i < n; i++) {
if (p == NULL) return false;
p = p->next;
}
Node
temp;
for (int i = 0; i < n; i++) {
temp = *head;
*head = (*head)->next;
free(temp);
}
return true;
}

Exercícios relacionados