Riešenia (skupina D, 3. týždeň)

Praktické cvičenie

/**
 * 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 aktualnyUzol = prvy;

                int indexAktualneho = 1;
                while ((indexAktualneho < index) && (aktualnyUzol != null)) {
                        aktualnyUzol = aktualnyUzol.dalsi;
                        indexAktualneho++;
                }

                return aktualnyUzol;
        }

        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 novyUzol = new Uzol();
                novyUzol.hodnota = value;
                if (prvy == null) {
                        prvy = novyUzol;
                }

                Uzol aktualny = prvy;
                while (aktualny.dalsi != null) {
                        aktualny = aktualny.dalsi;
                }
                aktualny.dalsi = novyUzol;
        }

        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 novyUzol = new Uzol();
                novyUzol.hodnota = value;
                novyUzol.dalsi = u.dalsi;
                u.dalsi = novyUzol;
        }

        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;
        }
}
public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                SpajanyZoznam z = new SpajanyZoznam();
                z.pridajNaZaciatok(1);
                z.pridajNaZaciatok(2);
                z.pridajNaZaciatok(3);
                z.pridajNaZaciatok(4);

                System.out.println(z.sucet());
                System.out.println(z.get(3));
        }

}