gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control system
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: aa4fd05)
raw | patch | inline | side by side (parent: aa4fd05)
author | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 2 Apr 2015 22:53:45 +0000 (00:53 +0200) | ||
committer | Doni Pracner <quinnuendo@gmail.com> | |
Thu, 2 Apr 2015 22:53:45 +0000 (00:53 +0200) |
kodovi/liste/ObrtanjeListe.java | [new file with mode: 0644] | patch | blob |
diff --git a/kodovi/liste/ObrtanjeListe.java b/kodovi/liste/ObrtanjeListe.java
--- /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