Usuwanie elementu z listy jednokierunkowej

0

Witam,
Chciałbym usunąć n-ty element z listy jednokierunkowej,

Definicja typu:

 hak = ^pudlo;

   pudlo  =  record
    klucz : real;
    tytul : String[50];
    rok   : Integer;
    opis  : String[255];
    ocena : Integer;
    nastepny :hak;
  end;

kod procedury

procedure TForm1.Button1Click(Sender: TObject, n: integer);
var
    i   : integer;
    akt,poprzedni : hak;

begin
    akt := pierwszy;
      if n = 1 then
       begin
        pierwszy := pierwszy^.nastepny;
        dispose(akt);
       end
    else
     begin
      for i:=1 to n do
        begin
		 poprzedni :=akt;
         akt := akt.nastepny;
        end;                                   
       if akt^.nastepny <> nil then
         poprzedni^.nastepny:= akt^.nastepny
       else
        poprzedni^.nastepny:= nil;
        dispose(akt);
      end;

end;

Pierwszy element usuwa dobrze, przy próbie usunięcia innego niż jeden mam błąd: Access vollation in ... lub przypisuje on na koncu listy 3 razy wartość z pozycji n.

Jak sobie z tym poradzić?
Proszę o wskazówki

0

na oko cos takiego bedzie:

//..
    else
      begin
        for i:=1 to n-1 do
          begin
            poprzedni :=akt;
            akt := akt^.nastepny;
          end;                                   
        poprzedni^.nastepny:= akt^.nastepny;
        dispose(akt);
      end;

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