Advertisement
Guest User

LinkedLIst

a guest
May 25th, 2015
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.79 KB | None | 0 0
  1. /*
  2.  * LinkedList.java
  3.  *
  4.  * @author Lukas Goodman <lukasrossgoodman@gmail.com>
  5.  */
  6.  
  7. /**
  8.  * Implements a linked list.
  9.  */
  10. public class LinkedList<E> implements List<E> {
  11.  
  12. /////////////////////////////// FIELDS ///////////////////////////////
  13.  
  14.     /** Head of this list. */
  15.     private ListNode<E> head;
  16.     /** Size of this list. */
  17.     private int size;
  18.  
  19. //////////////////////////// CONSTRUCTORS ////////////////////////////
  20.  
  21.     /**
  22.      * Create a new empty list.
  23.      */
  24.     public LinkedList() {
  25.         clear();
  26.     }
  27.  
  28. /////////////////////////////// METHODS //////////////////////////////
  29.  
  30.     /**
  31.      * Make sure n is on [0, n), otherwise throw IndexOutOfBoundsException.
  32.      *
  33.      * @param n number to check
  34.      */
  35.     private void checkN(int n) {
  36.         if (n < 0 || n >= size)
  37.             throw new IndexOutOfBoundsException("" + n);
  38.     }
  39.     private ListNode<E> getFirstNode() {
  40.         return head.getNext();
  41.     }
  42.    
  43.     private ListNode<E> getNth(int n) {
  44.         checkN(n);
  45.         ListNode<E> node = getFirstNode(); // first node
  46.         for (int i = 0; i < n; i++)
  47.             node = node.getNext();
  48.         return node;
  49.     }
  50.  
  51.     public boolean add(E e) {
  52.         ListNode<E> added = new ListNode(e);
  53.         ListNode<E> test = getFirstNode();
  54.         if(getFirstNode() == null)
  55.         {
  56.             head.setNext(added);
  57.             size++;
  58.         }
  59.         else
  60.         {
  61.             for(int i = 0; i < size; i++)
  62.             {
  63.                 if(test.getNext() == null)
  64.                 {
  65.                     break;
  66.                 }
  67.                 test = test.getNext();
  68.                
  69.             }
  70.             test.setNext(added);
  71.             size++;
  72.         }
  73.         return true;  
  74.     }
  75.    
  76.     public void clear() {
  77.         head = new ListNode<E>(null);
  78.         size = 0;
  79.     }
  80.    
  81.     public boolean contains(E e) {
  82.         ListNode<E> test = getFirstNode();
  83.         for(int i = 0; i < size; i++)
  84.         {
  85.             if(test.getValue() == e)
  86.             {
  87.                 return true;
  88.             }
  89.             test = test.getNext();
  90.         }
  91.         return false;
  92.     }
  93.    
  94.     public boolean remove(E e) {
  95.         ListNode<E> test = getFirstNode();
  96.         if(test.getValue().equals(e))
  97.         {
  98.             head.setNext(test.getNext());
  99.             size--;
  100.             return true;
  101.         }
  102.         else
  103.         {
  104.             ListNode<E> temp = getFirstNode();
  105.             for(int i = 0; i < size; i++)
  106.             {
  107.            
  108.                 if(test.getValue().equals(e))
  109.                 {
  110.                     temp.setNext(test.getNext());
  111.                     size--;
  112.                     return true;
  113.                 }
  114.                 temp = test;
  115.                 test = test.getNext();
  116.             }
  117.         }
  118.         return false;
  119.     }
  120.    
  121.     public int size() {
  122.         return size;
  123.     }
  124.  
  125.     public boolean add(int i, E e) {
  126.         ListNode<E> added = new ListNode(e);
  127.         ListNode<E> test = getFirstNode();
  128.         ListNode<E> temp;
  129.         if(i == 0)
  130.         {
  131.             head.setNext(added);
  132.             added.setNext(test);
  133.             size++;
  134.         }
  135.         else
  136.         {
  137.             for(int k = 0; k < i - 1; k++)
  138.             {
  139.                 temp = test.getNext();
  140.                 test = temp;           
  141.             }
  142.             added.setNext(test.getNext());
  143.             test.setNext(added);
  144.             size++;
  145.         }
  146.         return true;  
  147.     }
  148.    
  149.     public boolean remove(int i) {
  150.         ListNode<E> test = getFirstNode();
  151.         if(i == 0)
  152.         {
  153.  
  154.             head.setNext(test.getNext());
  155.             size--;
  156.             return true;
  157.         }
  158.         else if(i < size)
  159.         {
  160.             ListNode<E> temp = getFirstNode();
  161.             for(int k = 0; k < i; k++)
  162.             {
  163.                 temp = test;
  164.                 test = temp.getNext();
  165.             }
  166.             temp.setNext(test.getNext());
  167.             size--;
  168.             return true;
  169.         }
  170.         else
  171.             return false;
  172.  
  173.     }
  174.    
  175.     public E get(int i) {
  176.         if(i == 0)
  177.             return getFirstNode().getValue();
  178.         else
  179.         {
  180.             ListNode<E> test = getFirstNode();
  181.             for(int k = 0; k < i; k++)
  182.             {
  183.                 test = test.getNext();
  184.                
  185.             }
  186.             return test.getValue();
  187.         }
  188.        
  189.     }
  190.    
  191.     public E set(int i, E e) {  // returns existing element
  192.         ListNode<E> test = getFirstNode();
  193.         ListNode<E> newNode = new ListNode(e);
  194.  
  195.         if(i == 0)
  196.         {
  197.             head.setNext(newNode);
  198.             newNode.setNext(test.getNext());
  199.             return test.getValue();
  200.         }
  201.         else
  202.         {
  203.             ListNode<E> temp = test;
  204.             for(int k = 0; k < i; k++)
  205.             {
  206.                 temp = test;
  207.                 test = temp.getNext();
  208.                
  209.             }
  210.             temp.setNext(newNode);
  211.             newNode.setNext(test.getNext());
  212.             return test.getValue();
  213.         }
  214.     }
  215.  
  216.     public String toString() {
  217.         StringBuilder sb = new StringBuilder();
  218.         sb.append("[ ");
  219.         for(ListNode<E> node = getFirstNode(); node != null; node = node.getNext())
  220.             sb.append(node.toString()).append(", ");
  221.         return sb.append("]").toString();
  222.     }
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement