Hi,
I'm working with a single linked list and want to delete elements by
searching through the list (starting form the HEAD) then finding the
element, then doing the following:
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement );
Does the double ->next invoke undefined behaviour (sequence points
etc)?
========
The full function follows:
========
typedef struct ElementTag Element;
extern Element *NewElement;
extern Element *CurrentElement ;
extern Element *HeadElement;
/* Finds and deletes person- returns 1, returns 0 for failure) */
int
FindDeletePerso n(const char *name)
{
if(!strcmp(Head Element->Person.name, name))
{
NewElement = HeadElement->next;
free(HeadElemen t);
HeadElement = NewElement;
return 1;
}
else
{
CurrentElement = HeadElement;
while(CurrentEl ement->next)
{
if(!strcmp(Curr entElement->next->Person.name, name))
{
NewElement = CurrentElement->next;
CurrentElement->next = NewElement->next->next;
free(NewElement );
return 1;
}
CurrentElement = CurrentElement->next;
}
}
return 0;
}