Pergunta de entrevista da empresa Arista Networks

Given a singly-linked list with duplicate integer key values, write a function that, given the head of the list and an integer value, delete all nodes with the given key.

Resposta da entrevista

Sigiloso

18 de fev. de 2017

remove_duplicate(node_t **head, int value) { node_t *tmp; node_t *remove; if (*head == NULL) return; while((*head) && (*head)->value == value ) { remove = *head; *head = (*head)->next; free(remove); } tmp = *head; while (tmp != NULL) { if (tmp->next) { if (tmp->next->value == value) { remove = tmp->next; tmp->next = tmp->next->next; if ((*head) == remove ) { *head = tmp; } free(remove); } else { tmp = tmp->next; } } else { break; } } } remove_duplicated_nodes(node_t **head) { node_t *tmp = *head; while (tmp != NULL) { remove_duplicate(&tmp->next, tmp->value); tmp = tmp->next; } }