package sk.upjs.paz.cvicenie03;
/**
* 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;
@Override
public String toString() {
if (dalsi == null) {
return hodnota + "(next: NULL)";
}
return hodnota + "(next: " + dalsi.hodnota + ")";
}
}
/**
* 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;
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;
}
public void add(int value) {
Uzol novy = new Uzol();
novy.hodnota = value;
if (prvy == null) {
prvy = novy;
} else {
Uzol aktualny = prvy;
//while (aktualny != null) {
while (true) {
if (aktualny.dalsi == null) {
aktualny.dalsi = novy;
return;
}
aktualny = aktualny.dalsi;
}
}
}
// este vyriesit index mimo rozsahu
public void remove(int index) {
if (prvy == null) {
return;
}
if (index == 0) {
prvy = prvy.dalsi;
return;
}
// presun index-1 krat
Uzol aktualny = prvy;
for (int i = 0; i < index - 1; i++) {
// aktualny chcem aby predchadzal uzlu ktory odstranujem
aktualny = aktualny.dalsi;
if (aktualny.dalsi == null) {
return;
}
}
aktualny.dalsi = aktualny.dalsi.dalsi;
}
public static void main(String[] args) {
SpajanyZoznam z = new SpajanyZoznam();
z.add(7);
z.add(2);
z.add(6);
z.add(4);
z.remove(4);
// chcem 7,2,4
System.out.println(z);
}
}