Riešenia (skupina A, 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 aktualny = prvy;
                int pocet = 0;
                while (aktualny != null) {
                        if (pocet == index) {
                                return aktualny;
                        }

                        aktualny = aktualny.dalsi;
                        pocet++;
                }

                throw new IndexOutOfBoundsException();
        }

        public int get(int index) {
                Uzol u = vratITy(index);
                return u.hodnota;
                // return vratITy(index).hodnota;
        }

        public void set(int index, int value) {
                vratITy(index).hodnota = value;
        }

        public void add(int value) {
                if (prvy == null) {
                        pridajNaZaciatok(value);
                        return;
                }

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

                Uzol novy = new Uzol();
                novy.hodnota = value;
                novy.dalsi = null;
                aktualny.dalsi = novy;
        }

        public void add(int index, int value) {
                if (index == 0) {
                        pridajNaZaciatok(value);
                        return;
                }

                Uzol predosly = vratITy(index - 1);

                Uzol novy = new Uzol();
                novy.hodnota = value;
                novy.dalsi = predosly.dalsi;

                predosly.dalsi = novy;
        }

        public void remove(int index) {
                if (index == 0) {
                        prvy = prvy.dalsi;
                } else {
                        Uzol predosly = vratITy(index - 1);
                        predosly.dalsi = predosly.dalsi.dalsi;
                }
        }
}

public class Spustac {

        public static void main(String[] args) {

                SpajanyZoznam sz = new SpajanyZoznam();
                sz.add(20);
                sz.pridajNaZaciatok(5);
                sz.pridajNaZaciatok(4);
                sz.pridajNaZaciatok(1);
                sz.pridajNaZaciatok(8);

                System.out.println(sz);
                sz.set(2, 10);
                System.out.println(sz);

                sz.add(30);
                System.out.println(sz);
        }

}
/**
 * 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 pocet = 0;
                while (aktualny != null) {
                        if (pocet == index) {
                                return aktualny;
                        }

                        aktualny = aktualny.dalsi;
                        pocet++;
                }

                throw new IndexOutOfBoundsException();
        }

        public int get(int index) {
                return vratITy(index).hodnota;
        }

        public void set(int index, int value) {
                vratITy(index).hodnota = value;
        }

        public void add(int value) {
                if (prvy == null) {
                        pridajNaZaciatok(value);
                        return;
                }

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

                Uzol novy = new Uzol();
                novy.hodnota = value;
                // novy.dalsi = null;

                aktualny.dalsi = novy;
        }

        public void add(int index, int value) {
                if (index == 0) {
                        pridajNaZaciatok(value);
                        return;
                }

                Uzol predosly = vratITy(index - 1);

                Uzol novy = new Uzol();
                novy.hodnota = value;
                novy.dalsi = predosly.dalsi;
                predosly.dalsi = novy;
        }

        public void remove(int index) {
                if (index == 0) {
                        if (prvy == null)
                                throw new IndexOutOfBoundsException();

                        prvy = prvy.dalsi;
                } else {
                        Uzol predosly = vratITy(index - 1);
                        predosly.dalsi = predosly.dalsi.dalsi;
                }
        }
}

public class Spustac {

        /**
         * @param args
         */

        public static void main(String[] args) {
                SpajanyZoznam sz = new SpajanyZoznam();
                sz.pridajNaZaciatok(10);
                sz.pridajNaZaciatok(3);
                sz.pridajNaZaciatok(14);
                sz.pridajNaZaciatok(1);

                System.out.println(sz);
                sz.add(9);             
                System.out.println(sz);
        }

}