/**
* Trieda zapuzdrujuca spajany zoznam a manipulaciu s nim
*/
public class SpajanyZoznam {
/**
* Sukromna trieda reprezentujuca jeden uzol spajaneho zoznamu
*/
private static class Uzol {
int hodnota;
Uzol dalsi;
}
/**
* Referencia na prvy uzol spajaneho zoznamu
*/
private Uzol prvy = null;
/**
* Prida novu hodnotu na zaciatok spajaneho zoznamu
* @param hodnota pridavana hodnota
*/
public void pridajNaZaciatok(int hodnota) {
Uzol pridavany = new Uzol();
pridavany.hodnota = hodnota;
pridavany.dalsi = prvy;
prvy = pridavany;
}
@Override
public String toString() {
String vysledok = "[";
Uzol aktualny = prvy;
while (aktualny != null) {
if (aktualny != prvy)
vysledok += ", ";
vysledok += aktualny.hodnota;
aktualny = aktualny.dalsi;
}
return vysledok + "]";
}
/**
* Vrati sucet hodnot ulozenych v spajanom zozname
*/
public int sucet() {
// Referencia na uzol zoznamu, na ktorom sa prave nachadzame
Uzol aktualny = prvy;
// Premenna, v ktorej akumulujeme sucet
int vysledok = 0;
// Kym sme na nejakom uzle ...
while (aktualny != null) {
// Priratame hodnotu uzla
vysledok += aktualny.hodnota;
// Presunieme sa na dalsi uzol v zozname
aktualny = aktualny.dalsi;
}
return vysledok;
}
private Uzol vratITy(int index) {
Uzol aktualny = prvy;
int poradie = 0;
while (aktualny != null) {
if (poradie == index)
return aktualny;
poradie++;
aktualny = aktualny.dalsi;
}
return null;
}
public int get(int index) {
Uzol u = vratITy(index);
return u.hodnota;
}
public void set(int index, int value) {
Uzol u = vratITy(index);
u.hodnota = value;
}
public void add(int value) {
Uzol novy = new Uzol();
novy.hodnota = value;
if (prvy == null) {
prvy = novy;
}
Uzol aktualny = prvy;
while (aktualny.dalsi != null) {
aktualny = aktualny.dalsi;
}
aktualny.dalsi = novy;
}
public void add(int index, int value) {
if (index == 0) {
pridajNaZaciatok(value);
return;
}
Uzol u = vratITy(index - 1);
if (u == null)
throw new ArrayIndexOutOfBoundsException();
Uzol novy = new Uzol();
novy.hodnota = value;
novy.dalsi = u.dalsi;
u.dalsi = novy;
}
public void remove(int index) {
if (index == 0) {
prvy = prvy.dalsi;
return;
}
Uzol u = vratITy(index - 1);
if (u == null)
throw new ArrayIndexOutOfBoundsException();
u.dalsi = u.dalsi.dalsi;
}
}