Cześć,
Mam takie pytanie co do takiej funkcji wykorzystywanej w listach. Chodzi mi o algorytm usuwania wybranego elementu listy jednokierunkowej
e
- wskazanie elementu listy do usunięcia
struct slistEl
{
slistEl * next;
typ_danych data;
};
void l_remove( slistEl * & head, slistEl * e )
{
slistEl * p;
if( head == e ) l_pop_front( head );
else
{
p = head;
while( p->next != e ) p = p->next;
p->next = e->next;
delete e;
}
}
Chodzi mi dokładnie o instrukcję
if( head == e ) l_pop_front( head );
Czy to należy rozumieć tak:
Jeśli w polu
next
zmiennej
head
jest wskaźnik do pokazywania na pierwszy element listy i ten pierwszy element listy znajduje się pod adresem np. AAA oraz jeśli zmienna
e
znajduje się również pod adresem AAA, to mamy prawdę w tym if-ie?
Innymi słowy: prawdę mam, gdy wskaźnik w zmiennej
head
mówi: idź pod adres AAA, a jednocześnie zmienna
e
leży również pod adresem AAA. Czy tak to należy rozumieć?
Bo nie do końca wiem, co tu jest porównywane.
I jeszcze nie jestem pewien jak to należy rozumieć:
while( p->next != e ) p = p->next;
przechodź do następnego elementu listy, gdy wskaźnik w polu
next
zmiennej
p
jest różny od adresu, pod którym znajduje się zmienna
e
?
Czyli jeśli zmienna
e
jest pod adresem AAA, to program powinien wykonywać instrukcję pętli dopóty, dopóki w polu
next
zmiennej
p
wskaźnik nie wskazuje na adres AAA, czyli NIE mówi: idź pod adres AAA ?