program izbaciPosleParnog; 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; function izbaciPosleParnog(p:pokelement):pokelement; var pom1, pom2:pokelement; begin pom1 := p; while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1) do begin pom2 := pom1; pom1 := pom1^.sledeci; end; pom2 := pom1; pom1 := pom1^.sledeci; pom2^.sledeci := pom1^.sledeci; dispose(pom1); izbaciPosleParnog := p; end; var n,i,x:integer; glava:pokelement; begin glava := NIL ; writeln('Unesi broj elemenata u listi:'); readln(n); for i:=1 to n do begin writeln('Unesi ',i,'. element:'); readln(x); glava := dodaj(glava, x); end; glava := izbaciPosleParnog(glava); writeln('Kreirana lista je:'); stampaj_listu( glava ); end.
Kako funkcioniše
1. Inicijalizacija pokazivača
pom1 := p;
pom1
je pokazivač koji koristimo za prolazak kroz listu. On je inicijalizovan na početak liste, tj. na prvi element.
2. Traženje prvog parnog broja
while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1) do
begin
pom2 := pom1;
pom1 := pom1^.sledeci;
end;
- Petlja
while (pom1 <> NIL) and (pom1^.podatak mod 2 = 1)
se koristi da bi se pronašao prvi parni broj u listi.pom1^.podatak mod 2 = 1
proverava da li je trenutni element neparan.- Ako je trenutni element neparan, petlja prelazi na sledeći element, čuvajući prethodni element u
pom2
.
3. Uklanjanje elementa nakon prvog parnog broja
pom2 := pom1;
pom1 := pom1^.sledeci;
pom2^.sledeci := pom1^.sledeci;
dispose(pom1)
- Nakon što se nađe prvi parni broj (kroz prethodnu petlju),
pom1
pokazuje na prvi neparan broj nakon parnog broja. pom2 := pom1
: Čuvamo trenutni element (parni broj).pom1 := pom1^.sledeci
: Pomera se na sledeći element.pom2^.sledeci := pom1^.sledeci
: Prethodni element (parni broj) sada pokazuje na element koji se nalazi posle sledećeg (koji treba da bude obrisan).dispose(pom1)
: Oslobađamo memoriju za element koji je obrisan.
4. Vraćanje početnog pokazivača
izbaciPosleParnog := p;
- Na kraju, vraćamo početni pokazivač
p
jer nije došlo do promene u samom početku liste.