program dodavanje_posle_prvog_parnog_elementa; 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 dodajNaParni(p:pokelement; n:integer) :pokelement; var novi, pom:pokelement; begin pom := p; while pom <> NIL do begin if pom^.podatak mod 2 <> 0 then pom := pom^.sledeci else begin new(novi); novi^.podatak := n; novi^.sledeci := pom^.sledeci; pom^.sledeci := novi; break; end; end; dodajNaParni := 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; writeln('Unesi elemenat koji zelis da dodas u listu:'); readln(n); glava := dodajNaParni(glava, n); writeln('Kreirana lista je:'); stampaj_listu( glava ); end.
Kako funkcioniše
1. Inicijalizacija pokazivača
pom := p;
pom
je pomoćni pokazivač koji inicijalizujemo na početak liste (pokazivačp
na prvi element). Kroz ovaj pokazivač ćemo prolaziti kroz listu.
2. Prolazak kroz listu i traženje parnog broja
while pom <> NIL do
begin
if pom^.podatak mod 2 <> 0 then
pom := pom^.sledeci
- Petlja
while pom <> NIL
omogućava prolazak kroz celu listu dok ne naiđemo naNIL
, tj. dok ne dođemo do kraja liste. if pom^.podatak mod 2 <> 0
: Ako podatak trenutnog elementa nije paran (odnosno, ako nije deljiv sa 2), pomeramo pokazivačpom
na sledeći element (pom := pom^.sledeci
).
3. Dodavanje novog elementa nakon parnog broja
else
begin
new(novi);
novi^.podatak := n;
novi^.sledeci := pom^.sledeci;
pom^.sledeci := novi;
break;
end;
- Ako je podatak trenutnog elementa paran, kreiramo novi element:
new(novi)
: Alociramo memoriju za novi čvor.novi^.podatak := n
: Postavljamo podatak novog čvora nan
.novi^.sledeci := pom^.sledeci
: Novi element se povezuje sa sledećim elementom nakon trenutnog (koji je paran), jer će novi element postati između trenutnog i sledećeg.pom^.sledeci := novi
: Povezujemo trenutni element sa novim elementom.break
: Prekidamo petlju jer smo već dodali element i ne treba dalje da tražimo.
4. Vraćanje početnog pokazivača
dodajNaParni := p;
- Na kraju funkcije, vraćamo početni pokazivač
p
na prvi element liste jer lista nije promenila svoj početni element, samo smo dodali novi element.