Klasyczna lista jednokierunkowa, dodawanie, usuwanie, wyświetlanie osób itp. Otóż mam właśnie problem z usuwaniem osób. Rozumiem, iż oddzielnie powinienem usuwać pierwszy element, gdyż muszę przesunąć wskaźnik na początek, zaś w usuwaniu elementów ze środka powinienem usunąć element, a później, żeby nie było dziury, przesunąć wskaźnik na następny element.
Poniższy kod powinien działać, tak, że np. Posiadam listę 10 Kowalskich oraz 5 Różalskich, teraz wpisuję nazwisko Kowalski i program powinien usunąć mi wszystkich Kowalskich.
Gdy dodam tylko jednego Kowalskiego na pierwszą pozycję i go usunę, wszystko działa, gdy po tym jednym Kowalskim na pierwszej pozycji, dodam czterech Różalskich i usunę wszystkich Różalskich program również zadziała. Program wysypuję się tylko wtedy jeśli mam np. Kowalskiego na pierwszej pozycji, później załóżmy dwóch Różalskich i znowu 3 Kowalskich. Teraz gdy będę chciał usunąć Różalskich, wszystko zadziała, zaś gdy usunę Kowalskich program się wysypię. Wystarczy, że mój element jest na pierwszej i na jakiejś innej pozycji, wtedy jest błąd. Sądzę, że coś w pętli namieszałem.
#pragma once
struct Node{
char name[20],surname[20];
int age, height;
Node *next;
} *start=NULL;
void RemovePerson(){
char deletePerson[20];
printf("Enter the Surname: ");
scanf_s("%s", deletePerson, 20);
if(start==NULL)
printf("Empty List\n");
else{
if(strcmp(deletePerson,start->surname)==0){
Node *tmp=start;
start=start->next;
free(tmp);
}
Node *current=start, *previous=start;
while(current!=NULL){
if(strcmp(deletePerson,current->surname)==0){
previous->next=current->next;
free(current);
current=previous;
}
else{
previous=current;
current=current->next;
}
}
}
}