program Brisanje; type pokelement = ^element; element = record podatak: integer; sledeci: pokelement; end; function dodaj(p: pokelement; n: integer): pokelement; var pom: pokelement; begin if p = NIL then begin new(p); p^.podatak := n; p^.sledeci := NIL; end else begin pom := p; while pom^.sledeci <> NIL do pom := pom^.sledeci; new(pom^.sledeci); pom := pom^.sledeci; pom^.podatak := n; pom^.sledeci := NIL; end; dodaj := p; end; procedure stampaj_listu(p: pokelement); var pom: pokelement; begin pom := p; if p <> NIL then begin repeat write(pom^.podatak, ' '); pom := pom^.sledeci; until pom = NIL; writeln; end else writeln('Lista je prazna.'); writeln; end; procedure obrisi( var p: pokelement); var pom1, pom2: pokelement; begin if p = NIL then writeln('Lista je prazna.') else begin pom1 := p; while pom1^.sledeci <> nil do begin pom2 := pom1; pom1 := pom1^.sledeci; end; pom2^.sledeci := nil; dispose(pom1); end; end; var n, i, x: integer; glava: pokelement; begin glava := NIL; writeln('Unesi broj cvorova u listi:'); readln(n); for i := 1 to n do begin writeln('Unesi ', i, '. element:'); readln(x); glava := dodaj(glava, x); end; writeln('Lista pre brisanja elementa:'); stampaj_listu(glava); obrisi(glava); writeln('Lista posle brisanja elementa:'); stampaj_listu(glava); end.
Kako funkcioniše
1. Provera da li je lista prazna
if p = NIL then
writeln('Lista je prazna.');
- Ako je pokazivač
p
(prvi element liste)NIL
, to znači da je lista prazna. - U tom slučaju se ispisuje poruka “Lista je prazna.”, i funkcija se završava.
2. Traženje poslednjeg elementa
pom1 := p;
while pom1^.sledeci <> nil do
begin
pom2 := pom1;
pom1 := pom1^.sledeci;
end;
- Ako lista nije prazna, koristi se pokazivač
pom1
za prolazak kroz listu. - Petlja
while pom1^.sledeci <> nil
ide kroz listu dok se ne dođe do poslednjeg elementa (koji imasledeci = nil
). pom2 := pom1
: Prethodni element (koji je pre poslednjeg) se čuva upom2
, jer će biti potreban za povezivanje sanil
nakon brisanja poslednjeg elementa.
3. Brisanje poslednjeg elementa
pom2^.sledeci := nil;
dispose(pom1);
- Nakon što je poslednji element pronađen (pokazivač
pom1
), pokazivač prethodnog elementa (pom2
) se ažurira tako dapom2^.sledeci := nil
, čime se uklanja veza prema poslednjem elementu. dispose(pom1)
: Oslobađa memoriju zauzetu poslednjim elementom (pom1
), čime je on fizički uklonjen iz memorije.
