From: Doni Pracner Date: Thu, 2 Apr 2015 22:53:45 +0000 (+0200) Subject: Primer obrtanja liste X-Git-Url: https://svarog.pmf.uns.ac.rs/gitweb/?a=commitdiff_plain;h=fc3eac4a643b2f50e931774a312b182813672def;p=spa1-materijali.git Primer obrtanja liste --- diff --git a/kodovi/liste/ObrtanjeListe.java b/kodovi/liste/ObrtanjeListe.java new file mode 100644 index 0000000..48bcf15 --- /dev/null +++ b/kodovi/liste/ObrtanjeListe.java @@ -0,0 +1,95 @@ +/** + * Primer obrtanja liste unazad u jednom prolazu. Ovo može biti vrlo pogodno + * ukoliko nam je bitno da lista na kraju unosa bude u onom redosledu u kome su + * unošeni elementi, a ne želimo da imamo dodatni pokazivač na poslednji + * element. + */ +public class ObrtanjeListe { + + public static void main(String[] args) { + ListaStringovaOb lista = new ListaStringovaOb(); + + lista.dodaj("prvi"); + lista.dodaj("neki el"); + lista.dodaj("svasta"); + lista.dodaj("nista"); + lista.dodaj("poslednji"); + + System.out.println(lista); + + lista.obrniListu(); + + System.out.println(lista); + } + +} + +/** + * Lista stringova sa dodatnom operacijom obrtanja liste unazad. + */ +class ListaStringovaOb { + class Element { + String info; + Element veza; + + public Element(String s) { + this.info = s; + this.veza = null; + } + + public String toString() { + return info + ""; + } + } + + // pokazivac na prvi element liste + Element prvi = null; + + public String toString() { + String rez = "Lista: [ "; + Element tekuci = prvi; + while (tekuci != null) { + rez += '"' + tekuci.info + "\" "; + tekuci = tekuci.veza; + } + rez += "]"; + return rez; + } + + public void dodaj(String s) { + Element novi = new Element(s); + novi.veza = prvi; + prvi = novi; + } + + /** + * Obrće elemente liste tako da prvi postane poslednji, a poslednji prvi. + * Operacija se obavlja u samo jednom prolasku kroz listu. + */ + public void obrniListu() { + if (prvi == null || prvi.veza == null) { + // znaci da nemamo sta da radimo + return; + } + + // postoje bar 2 elementa + Element preth = null; + Element tek = prvi; + + while (tek != null) { + /** + * prevezujemo da element tek pokazuje na element preth; potrebno je + * da zapamtimo sledeci jer cemo izgubiti vezu na njega inace + */ + Element sled = tek.veza; + + tek.veza = preth; + + // pomeramo se na sledeca dva + preth = tek; + tek = sled; + } + + prvi = preth; + } +} \ No newline at end of file