[pascal] usuwanie listy jednokierunkowej

0

Utworzyłem liste jednokierunkową z pierwszym polem jako informacyjnym tj.

type
  TInfo = record
    head : PElement; // przechowuje adres pierwszego elementu
    tail : PElement;    // prechowuje adres ostatniego elementu
end;
var
  Info : TInfo;

gdzie PElement to wskaźnik na strukture danych poszczególnych elementów listy. No i teraz tak - chce usunąć całą liste:

var
  p : PElement;
while info.head <> nil do
begin
  p:=info.tail;
  info.tail:= ????????? <<<<= co tutaj ???????
  dispose(p);
end;

No i właśnie jak to rozwiązać ?? Bo jak bym chciał usuwać liste nie od ostatniego tylko od pierwszego elementu to bedzie taki sam problem.

0

To chyba żadna lista nie jest : dałeś złe pola (pierwszy i ostatni).

0

Lista jednokierunkowa wygląda tak:

type
  PElement=^TElement;
  TElement=record
    Next:PElement;
    Value:Integer; //To taki przykład, zależy co chcesz w tej liście trzymać
    end;
var
  Lista:PElement;

I teraz usuwanie czegoś takiego to:

var
  Tmp:PElement;
begin
  While Lista^.Next<>null do begin
    Tmp:=Lista;
    Lista:=Lista^.Next;
    Dispose(Tmp);
    end;
  Dispose(Lista);
  end;

Pisane z pamięci, mogą być jakieś błędy, ale chyba powinno być OK.

1 użytkowników online, w tym zalogowanych: 0, gości: 1