Jak mogę usunąć węzeł z połączonej listy?C Usuń węzeł z połączonej listy
Oto mój kod:
void RemoveNode(Node * node, Node ** head) {
if (strcmp(node->state, (*(*head)->next).state) == 0) {
Node * temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node * current = (*head)->next;
Node * previous = *head;
while (current != NULL && previous != NULL) {
if (strcmp(node->state, (*current->next).state) == 0) {
Node * temp = current;
previous->next = current->next;
free(temp);
return;
}
current = current->next;
previous = previous->next;
}
return;
}
ale wciąż otrzymuję błędy SEG.
Czuję, że robię coś głupiego .... Jakieś pomysły?
Dlaczego "poprzedni = poprzedni-> następny" zamiast tylko "poprzedni = bieżący" przed ponownym przypisaniem bieżącego? –
Ponadto, jeśli wystąpią błędy segmentacji, uruchom program w debugerze. Zatrzyma się w miejscu, w którym masz problem, i pozwoli ci na zbadanie listy połączeń i zmiennych. Przynajmniej powinieneś edytować swoje pytanie, aby dołączyć do niego listę połączeń i wskazać, gdzie w dostarczonym kodzie następuje awaria. –
Czy też zawsze masz * prawidłowy wskaźnik '(* head) -> next'? Co jeśli lista jest pusta? Co jeśli na liście jest tylko jeden węzeł? –