gon2

Untitled

Feb 5th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.60 KB | None | 0 0
  1. public class SinglyLinkedList<T> {
  2.  
  3.     private class Node {
  4.  
  5.         Node next;
  6.         T data;
  7.  
  8.         Node(T data, Node next) {
  9.             this.data = data;
  10.             this.next = next;
  11.         }
  12.     }
  13.  
  14.     private Node head;
  15.     private int length;
  16.  
  17.     SinglyLinkedList() {
  18.         /*
  19.         Smiður sem upphafsstillir tóman lista.
  20.          */
  21.         this.head = null;
  22.         this.length = 0;
  23.     }
  24.  
  25.     public int size() {
  26.         /*
  27.         Skilar fjölda staka í listanum.
  28.          */
  29.         return this.length;
  30.     }
  31.  
  32.     public boolean isEmpty() {
  33.         /*
  34.         Skilar sönnu innihaldi listinn engin stök, annars ósönnu
  35.          */
  36.         if (this.head == null) return true;
  37.         else return false;
  38.     }
  39.  
  40.     @Override
  41.     public String toString() {
  42.         /*
  43.         Aðferð sem sýnir fallega strengjaframsetningu á listanum.
  44.          */
  45.         String s = "";
  46.         Node n = this.head;
  47.  
  48.         //flökkum um allan listann og bætum við strenginn:
  49.         for (int i=0; i<this.length; i++) {
  50.           s += " " + n.data;
  51.           n = n.next;
  52.         }
  53.         return "[" + s + " ]";
  54.     }
  55.  
  56.     public T get(int index) {
  57.         /*
  58.         Skilar staki númer index í listanum án þess að breyta honum.
  59.          */
  60.         if (index < 0 || this.size() <= index) {
  61.             throw new ArrayIndexOutOfBoundsException("Vísað út fyrir lista");
  62.         }
  63.  
  64.         Node n = this.head;
  65.         if (index != 0) {
  66.           //flökkum "index" sinnum um listann:
  67.           for (int i=0; i<index; i++) {
  68.             n = n.next;
  69.           }
  70.         }
  71.         return n.data;
  72.     }
  73.  
  74.     public void insert(int index, T data) {
  75.         /*
  76.         Bætir staki við listann í sæti númer index, án þess að yfirskrifa stak.
  77.         Öllum stökum sem koma á eftir nýja stakinu er hliðrað í átt að enda listans.
  78.          */
  79.         if (index < 0 || this.size() < index) {
  80.             throw new ArrayIndexOutOfBoundsException("Vísað út fyrir lista");
  81.         }
  82.  
  83.         Node n = this.head;
  84.         Node m = this.head;
  85.         Node insert = this.head;
  86.         //fremst í lista:
  87.         if (index == 0) {
  88.           insert = new Node(data, this.head);
  89.           this.head = insert;
  90.         }
  91.         //í miðjan lista:
  92.         else if (index > 0 && index < this.length) {
  93.           for (int i=0; i<index; i++) {
  94.             if (i == index-1) m = n;
  95.             n = n.next;
  96.           }
  97.           insert = new Node(data, n);
  98.           m.next = insert;
  99.         }
  100.         //aftast í lista:
  101.         else {
  102.           for (int j=0; j<=index-2; j++) {
  103.             n = n.next;
  104.           }
  105.           insert = new Node(data, null);
  106.           n.next = insert;
  107.         }
  108.         //listinn hefur aukist um einn:
  109.         this.length++;
  110.     }
  111.  
  112.     public static void main(String[] args) {
  113.         SinglyLinkedList<Integer> list1 = new SinglyLinkedList<>();
  114.         try {
  115.             list1.insert(0, 2); // Athugum hvort við getum bætt við staki í tóman lista
  116.             System.out.println(list1); // [ 2 ]
  117.             list1.insert(0, 1); // Athugum hvort við getum bætt staki fremst í lista
  118.             System.out.println(list1); // [ 1 2 ]
  119.             list1.insert(2, 4); // Athugum hvort við getum bætt staki aftast í lista
  120.             System.out.println(list1); // [ 1 2 4 ]
  121.             list1.insert(2, 3); // Athugum hvort við getum bætt staki í miðjan lista
  122.             System.out.println(list1); // [ 1 2 3 4]
  123.         } catch (ArrayIndexOutOfBoundsException e) {
  124.             System.out.println("Innsetningaraðferðin brást þegar hún átti ekki að gera það");
  125.             e.printStackTrace();
  126.         }
  127.  
  128.         for (int i = 0; i < list1.size(); i++) { // Sýnum að get aðferðin virki
  129.             System.out.println("list1.get(" + i + "): " + list1.get(i));
  130.         }
  131.  
  132.         try {
  133.             System.out.println(list1.get(-1));
  134.         } catch (ArrayIndexOutOfBoundsException e) {
  135.             System.out.println("Kall á list1.get(-1) mistókst réttilega");
  136.         }
  137.  
  138.         try {
  139.             System.out.println(list1.get(list1.size()));
  140.         } catch (ArrayIndexOutOfBoundsException e) {
  141.             System.out.println("Kall á list1.get(list1.size()) mistókst réttilega");
  142.         }
  143.  
  144.         // Prófum annan lista til að sýna að hann sé fjölnota:
  145.         SinglyLinkedList<Character> list2 = new SinglyLinkedList<>();
  146.         list2.insert(0, 'D');
  147.         list2.insert(0, 'C');
  148.         list2.insert(0, 'B');
  149.         list2.insert(0, 'A');
  150.         System.out.println(list2);
  151.     }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment