gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Primer obrtanja liste
authorDoni Pracner <quinnuendo@gmail.com>
Thu, 2 Apr 2015 22:53:45 +0000 (00:53 +0200)
committerDoni Pracner <quinnuendo@gmail.com>
Thu, 2 Apr 2015 22:53:45 +0000 (00:53 +0200)
kodovi/liste/ObrtanjeListe.java [new file with mode: 0644]

diff --git a/kodovi/liste/ObrtanjeListe.java b/kodovi/liste/ObrtanjeListe.java
new file mode 100644 (file)
index 0000000..48bcf15
--- /dev/null
@@ -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
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner