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) {
int pocitadlo = 0;
Uzol aktualny = prvy;
while (aktualny != null) {
if (pocitadlo == index) {
return aktualny;
}
aktualny = aktualny.dalsi;
pocitadlo++;
}
return null;
}
public int get(int index) {
Uzol uzolSObsahom = vratITy(index);
if (uzolSObsahom != null)
return uzolSObsahom.hodnota;
else
throw new IndexOutOfBoundsException();
}
public void add(int value) {
Uzol novy = new Uzol();
novy.hodnota = value;
novy.dalsi = null;
if (prvy == null) {
prvy = novy;
return;
}
Uzol aktualny = prvy;
while (aktualny.dalsi != null) {
aktualny = aktualny.dalsi;
}
aktualny.dalsi = novy;
}
public void add(int index, int value) {
Uzol novy = new Uzol();
novy.hodnota = value;
if (index == 0) {
novy.dalsi = prvy;
prvy = novy;
return;
}
Uzol predosly = vratITy(index - 1);
novy.dalsi = predosly.dalsi;
predosly.dalsi = novy;
}
public int size() {
int pocet = 0;
Uzol aktualny = prvy;
while (aktualny != null) {
aktualny = aktualny.dalsi;
pocet++;
}
return pocet;
}
public void remove() {
int dlzka = size();
if (dlzka == 1) {
prvy = null;
} else {
Uzol predposledny = vratITy(dlzka - 2);
predposledny.dalsi = null;
}
}
public void set(int index, int value) {
Uzol uzolSObsahom = vratITy(index);
if (uzolSObsahom != null)
uzolSObsahom.hodnota = value;
else
throw new IndexOutOfBoundsException();
}
public static void main(String[] args) {
SpajanyZoznam zoznam = new SpajanyZoznam();
/**
* for (int i = 0; i < 10; i++) zoznam.pridajNaZaciatok((int)
* (Math.random() * 100));
**/
System.out.println(zoznam);
zoznam.add(333);
System.out.println(zoznam);
}
}