Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2014
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.24 KB | None | 0 0
  1.  
  2. public class LinkedList
  3. {
  4.     protected LinkedListElement first;
  5.     protected LinkedListElement last;
  6.    
  7.     LinkedList()
  8.     {
  9.         makenull();
  10.     }
  11.    
  12.     //Funkcija makenull inicializira seznam
  13.     public void makenull()
  14.     {
  15.         //drzimo se implementacije iz knjige:
  16.         //po dogovoru je na zacetku glava seznama (header)
  17.         first = new LinkedListElement(null, null);
  18.         last = null;
  19.     }
  20.    
  21.     //Funkcija addLast doda nov element na konec seznama
  22.     public void addLast(Object obj)
  23.     {
  24.         //najprej naredimo nov element
  25.         LinkedListElement el = new LinkedListElement(obj);
  26.         //ustrezno ga povezemo s koncem verige obstojecih elementov
  27.         if(last == null) {
  28.             first.next = el;
  29.             last = first;
  30.         } else {
  31.             last.next.next = el;
  32.             last = last.next;
  33.         }
  34.         //po potrebi posodobimo kazalca "first" in "last"
  35.     }
  36.    
  37.     //Funkcija write izpise elemente seznama
  38.     public void write()
  39.     {
  40.         //zacnemo pri elementu za glavo seznama
  41.         //sprehodimo se po elementih do konca seznama
  42.         //in izpisemo vrednost vsakega elementa
  43.         LinkedListElement el;
  44.         el = first.next;
  45.         while(el != null) {
  46.             System.out.print(el.element + ", ");
  47.             el = el.next;
  48.         }
  49.         System.out.println();
  50.        
  51.         //za kontrolo lahko izpisemo tudi vrednosti kazalcev "first" in "last"
  52.     }
  53.    
  54.     //Funkcija addFirst doda nov element na prvo mesto v seznamu (takoj za glavo seznama)
  55.     void addFirst(Object obj)
  56.     {
  57.         //najprej naredimo nov element
  58.         LinkedListElement el = new LinkedListElement(obj);
  59.         //ustrezno ga povezemo z glavo seznama
  60.         if(last == null) {
  61.             first.next = el;
  62.             last = first;
  63.         } else {
  64.             el.next = first.next;
  65.             first.next = el;
  66.         }
  67.         //po potrebi posodobimo kazalca "first" in "last"
  68.     }
  69.    
  70.     //Funkcija length() vrne dolzino seznama (pri tem ne uposteva glave seznama)
  71.     int length()
  72.     {
  73.         int stevec = 0;
  74.         LinkedListElement el = first.next;  // prvi dejanski element (od headerja prvi naslednji)
  75.         while(el != null) {
  76.             stevec++;
  77.             el = el.next;
  78.         }
  79.         return stevec;
  80.     }
  81.    
  82.     //Funkcija lengthRek() klice rekurzivno funkcijo za izracun dolzine seznama
  83.     int lengthRek()
  84.     {
  85.         // pomagajte si z dodatno funkcijo int lengthRek(LinkedListElement el), ki izracuna
  86.         // dolzino seznama za opazovanim elementom ter pristeje 1
  87.         return lengthRek(first.next);
  88.     }
  89.    
  90.     int lengthRek(LinkedListElement el)
  91.     {
  92.         if(el == null) {
  93.             return 0;
  94.         } else {
  95.             return lengthRek(el.next)+1;
  96.         }
  97.     }
  98.    
  99.     //Funkcija insertNth vstavi element na n-to mesto v seznamu
  100.     //(prvi element seznama, ki se nahaja takoj za glavo seznama, je na indeksu 0)
  101.  
  102.     boolean insertNth(Object obj, int n)
  103.     {
  104.         //zacnemo pri glavi seznama
  105.         LinkedListElement el = new LinkedListElement(obj);
  106.         //LinkedListElement iterate = first.next;   // da gledas dejansko od prvega elementa naprej
  107.         LinkedListElement iterate = first;
  108.         if(n==0) {
  109.             this.addFirst(el.element);
  110.             return true;
  111.         } else if (n == this.length()) {
  112.             this.addLast(el.element);
  113.             return true;
  114.         } else if (this.length() < n) {
  115.             //System.out.println("Dodajanje na izbrano mesto ni mogoce.");
  116.             return false;
  117.         } else {
  118.             for(int i=0; i<n; i++) {
  119.                 iterate = iterate.next;
  120.             }
  121.             el.next = iterate.next;
  122.             iterate.next = el;
  123.             if(this.length()-1 == n) {
  124.                 this.last = el;
  125.             }
  126.             return true;
  127.         }
  128.    
  129.         //sprehodimo se po elementih dokler ne pridemo do zeljenega mesta
  130.        
  131.         // ce je polozaj veljaven
  132.         //   naredimo nov element
  133.         //   ustrezno ga povezemo v verigo elementov
  134.         //   po potrebi posodobimo kazalec "last"
  135.         //   vrnemo true
  136.         // sicer
  137.         //   vrnemo false
  138.     }
  139.    
  140.     boolean deleteLast()
  141.     {
  142.         if(this.length() == 0) return false;
  143.         if(this.length() == 1)
  144.         {
  145.             first.next = null;
  146.             last = null;
  147.             return true;
  148.         }
  149.         LinkedListElement elm = first;
  150.         while(elm.next.next.next != null) {
  151.             elm = elm.next;
  152.         }
  153.         elm.next.next = null;
  154.         last = elm;
  155.         return true;
  156.     }
  157.    
  158.     //Funkcija deleteNth izbrise element na n-tem mestu v seznamu
  159.     //(prvi element seznama, ki se nahaja takoj za glavo seznama, je na indeksu 0)
  160.     boolean deleteNth(int n)
  161.     {
  162.         //zacnemo pri glavi seznama
  163.         if(this.length() <= n) {
  164.             return false;
  165.         }
  166.         if(this.length() == n + 1) {
  167.             this.deleteLast();
  168.             return true;
  169.         }
  170.         /*
  171.         if(this.length() == n + 2) {
  172.             LinkedListElement el = first;
  173.             for(int i=0; i<n-1; i++) {
  174.                 el = el.next;
  175.             }
  176.             last = el;
  177.             el.next = el.next.next;
  178.             return true;
  179.         }
  180.         */
  181.         //sprehodimo se po elementih dokler ne pridemo do zeljenega mesta
  182.         LinkedListElement el = first;
  183.         for(int i=0; i<n-1; i++) {
  184.             el = el.next;
  185.         }
  186.         if(this.length() == n + 2) {
  187.             last = el;
  188.         }
  189.         el.next = el.next.next;
  190.         return true;       
  191.         // ce je polozaj veljaven
  192.         //   ustrezno prevezemo elemente seznama tako, da ciljni element izlocimo iz verige
  193.         //   po potrebi posodobimo kazalec "last"
  194.         //   vrnemo true
  195.         // sicer
  196.         //   vrnemo false
  197.     }
  198.    
  199.     //Funkcija reverse obrne vrstni red elementov v seznamu (pri tem ignorira glavo seznama)
  200.     void reverse()
  201.     {
  202.         //ne pozabimo na posodobitev kazalca "last"!
  203.         LinkedList temp = new LinkedList();
  204.         LinkedListElement prejeti = first.next;
  205.         for(int i=0; i<this.length(); i++) {
  206.             temp.addFirst(prejeti.element);
  207.             prejeti = prejeti.next;
  208.             if(i == 2) {
  209.                 //last = prejeti;
  210.             }
  211.         }
  212.         first = temp.first;
  213.         last = temp.last;
  214.     }
  215.    
  216.     //Funkcija reverseRek klice rekurzivno funkcijo, ki obrne vrstni red elementov v seznamu
  217.     void reverseRek()
  218.     {
  219.         // pomagajte si z dodatno funkcijo void reverseRek(LinkedListElement el), ki
  220.         // obrne del seznama za opazovanim elementom, nato ta element doda na konec (obrnjenega) seznama
  221.     }
  222.    
  223.     //Funkcija removeDuplicates odstrani ponavljajoce se elemente v seznamu
  224.     void removeDuplicates()
  225.     {
  226.         //ne pozabimo na posodobitev kazalca "last"!
  227.         LinkedList temp = new LinkedList();
  228.         LinkedListElement el = first.next;
  229.         for(int i=0; i<this.length(); i++) {
  230.             if(temp.elementObstaja(el.element)) {
  231.                 // ne dodas elementa v nov seznam, gres naprej
  232.             } else {
  233.                 temp.addLast(el.element);
  234.                 el = el.next;
  235.             }
  236.         }
  237.         first = temp.first;
  238.         last = temp.last;
  239.     }
  240.    
  241.     boolean elementObstaja(Object obj) {
  242.         LinkedListElement trenutni = first;
  243.         for(int i=0; i<this.length(); i++) {
  244.             if(obj == trenutni.element) {
  245.                 return true;
  246.             }
  247.             else {
  248.                 trenutni = trenutni.next;
  249.             }
  250.         }
  251.         return false;
  252.     }
  253. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement