Faça uma função para remover os
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>
#include <stdbool.h>
typedef struct Node {
int data;
struct Node* next;
} 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;
}
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;
}