Dodam, że zapis L.head jest równoważny zapisowi head[L] z tego co wiem, aczkolwiek dobrze by było gdybyś się upewnił.
Algorytm, który szuka elementu o kluczu x i usuwa go z listy(jeżeli jest kilka to usunie tylko ten pierwszy na liście):
Kod: Zaznacz cały
Remove(L,x)
p:=L.head
if(p.key=x) then
{
L.head:=p.next
return L
}
else
{
while p!= NIL do
{
z:=p
p:=p.next
if(p.key==x) then
{
z:=p.next.next
return L
}
}
return Nie znaleziono x
}
Opis działania algorytmu:
Funkcja dostaje od nas listę L oraz wartość klucza do usunięcia oznaczamy ją przez x.
Przypisujemy do zmiennej p głowę naszego programu.
Sprawdzamy, czy nasza głowa jest szukaną, jeżeli tak to: głową naszej listy zostanie kolejny element na liście, czyli drugi, jeżeli drugiego elementu nie ma, to traktujemy to jako NIL, a więc zostanie przypisana do głowy wartość NIL. return L - kończy program i zwraca listę.
Jeżeli jednak głowa nie jest naszą szukaną to:
w pętli while wykonujemy czynności:
sprawdź czy p nie jest NIL, jak jest to kończ program i wypisz komunikat, że nie ma elementu o kluczu x. W przeciwnym wypadku, jak nie jest NIL to:
Do z przypisz p, p przypisz p.next , czyli element następny (jeżeli p.next jest NIL to nic złego się nie wydarzy, bo program porówna NIL z x i nie wejdźie to if'a , a przy następnym obiegu przerwie się pętla while). Jeżeli program napotka element o kluczu równym x, wtedy wchodzi do if'a i do zmiennej z(czyli do elementu poprzedniego względem elementu szukanego) przypisuje element następny, który jest po elemencie , który usuwamy.(Tutaj analogicznie jak poprzednio jak jest NIL to nic się złego nie stanie).