Advertisement
Guest User

Untitled

a guest
May 10th, 2012
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.92 KB | None | 0 0
  1. package lists.doublechained;
  2.  
  3. import java.util.Iterator;
  4.  
  5. import lists.ListElem;
  6.  
  7. /**
  8.  *
  9.  * @author Patrick Krusch
  10.  */
  11. public class LinkedList<T extends Comparable<T>>{
  12.    
  13.     private ListElem<T> first;
  14.     private ListElem<T> last;
  15.     private int size;
  16.    
  17.     /**
  18.      * adds a new element to the list's head
  19.      *
  20.      * @param data
  21.      *            the content to add
  22.      */
  23.     public void addFirst(T data) {
  24.         ListElem<T> newElem = new ListElem<T>(data);
  25.        
  26.         if (first == null){
  27.             this.first = newElem;
  28.             this.last = newElem;
  29.         }
  30.         else{
  31.             newElem.next = first;
  32.             first.prev = newElem;
  33.             first = newElem;
  34.         }
  35.         size++;
  36.     }
  37.  
  38.     /**
  39.      * adds a new element to the list's tail
  40.      *
  41.      * @param data
  42.      *            the content to add
  43.      */
  44.     public void addLast(T data) {
  45.         ListElem<T> newElem = new ListElem<T>(data);
  46.        
  47.         if (last == null){
  48.             this.first = newElem;
  49.             this.last = newElem;
  50.         }
  51.         else{
  52.             last.next = newElem;
  53.             newElem.prev = last;
  54.             last = newElem;
  55.             }
  56.         size++;
  57.         }
  58.  
  59.     /**
  60.      * returns the element located at the given position
  61.      *
  62.      * @param index
  63.      *            the given position
  64.      * @return the element contained at the given position or null if given
  65.      *         index does not exist.
  66.      */
  67.     public T get(int index) {
  68.         if (index+1 > size){
  69.         return null;
  70.         }
  71.         else{
  72.             ListElem<T> currentElement = this.first;
  73.             for (int i=0 ; i < index; i++){
  74.                 currentElement = currentElement.next;
  75.             }
  76.         return currentElement.data;
  77.         }
  78.     }
  79.  
  80.     /**
  81.      * removes and returns the first element of the list
  82.      *
  83.      * @return the first element if one exists, null otherwise
  84.      */
  85.     public T removeFirst() {
  86.         if (size == 0){
  87.             return null;
  88.         }
  89.         if (size == 1){
  90.             ListElem<T> removeElement = first;
  91.             first = null;
  92.             last = null;
  93.             size--;
  94.             return removeElement.data;
  95.         }
  96.         else{
  97.             ListElem<T> removeElement = first;
  98.             this.first = removeElement.next;
  99.             first.prev = null;
  100.             size--;
  101.             return removeElement.data;
  102.         }
  103.     }
  104.  
  105.     /**
  106.      * removes and returns the last element of the list
  107.      *
  108.      * @return the last element if one exists, null otherwise
  109.      */
  110.     public T removeLast() {
  111.         if (size == 0){
  112.             return null;
  113.         }
  114.         if (size == 1){
  115.             ListElem<T> removeElement = last;
  116.             first = null;
  117.             last = null;
  118.             size--;
  119.             return removeElement.data;
  120.         }
  121.         else{
  122.             ListElem<T> removeElement = last;
  123.             this.last = removeElement.prev;
  124.             last.next = null;
  125.             size--;
  126.             return removeElement.data;
  127.         }
  128.     }
  129.    
  130.  
  131.     /**
  132.      * removes and returns the element located at the given position
  133.      *
  134.      * @param index
  135.      *            the given position
  136.      * @return the element contained at the given position or null if given
  137.      *         index does not exist.
  138.      */
  139.     public T remove(int index) {
  140.         if (index+1 > size || size==0){
  141.             return null;
  142.         }
  143.         if (index == 0){
  144.             return removeFirst();
  145.         }
  146.         if (index == size-1){
  147.             return removeLast();
  148.         }
  149.         else{
  150.             ListElem<T> currentElement = this.first;
  151.             ListElem<T> prevElement = null;
  152.             ListElem<T> nextElement = null;
  153.             for (int i=0 ; i < index; i++){
  154.                 currentElement = currentElement.next;
  155.             }
  156.             prevElement = currentElement.prev;
  157.             nextElement = currentElement.next;
  158.             prevElement.next = nextElement;
  159.             nextElement.prev = prevElement;
  160.             size--;
  161.             return currentElement.data;
  162.         }
  163.     }
  164.  
  165.     /**
  166.      * @return whether this list is empty or not
  167.      */
  168.     public boolean isEmpty() {
  169.         if (size == 0){
  170.             return true;
  171.         }
  172.         else{
  173.             return false;
  174.         }
  175.     }
  176.  
  177.     /**
  178.      * @return the list's size
  179.      */
  180.     public int size() {
  181.         return size;
  182.     }
  183.    
  184.    
  185.     public class DoubleChainIterator implements Iterable<T>, Iterator<T>{
  186.  
  187.  
  188.         private int counter=-1;
  189.         private ListElem<T> currentElement = null;
  190.        
  191.        
  192.         @Override
  193.         public boolean hasNext() {
  194.             if (counter == -1){
  195.                 if (LinkedList.this.first != null){
  196.                     return true;
  197.                 }
  198.                 else{
  199.                     return false;
  200.                 }
  201.             }
  202.             else{
  203.                 if (currentElement.next != null){
  204.                     return true;
  205.                 }
  206.             }
  207.             return false;
  208.         }
  209.  
  210.         @Override
  211.         public T next() {
  212.             if (hasNext()){
  213.                 if (counter == -1){
  214.                     currentElement = LinkedList.this.first;
  215.                     counter++;
  216.                     return currentElement.data;
  217.                 }
  218.                 else{
  219.                     currentElement = currentElement.next;
  220.                     counter++;
  221.                     return currentElement.data;
  222.                 }
  223.             }
  224.             else{
  225.                 return null;
  226.             }
  227.         }
  228.  
  229.         @Override
  230.         public void remove() {
  231.             LinkedList.this.remove(counter);
  232.            
  233.         }
  234.  
  235.         @Override
  236.         public Iterator<T> iterator() {
  237.             return this;
  238.         }
  239.    
  240.     }
  241.    
  242.     public static void main(String[] args) {
  243.         LinkedList<Integer> i = new LinkedList<Integer>();
  244.         i.addLast(1);
  245.         i.addLast(2);
  246.         i.addLast(3);
  247.         Iterator<Integer> itr =  i.iterator();
  248.         System.out.println(itr.hasNext());
  249.         System.out.println(i.get(0) +" "+ i.get(1) +" "+ i.get(2));
  250.         i.remove(1);
  251.         System.out.println(i.get(0) +" "+ i.get(1));
  252.         i.remove(0);
  253.         System.out.println(i.get(0));
  254.         i.remove(0);
  255.         System.out.println(i);
  256.     }
  257.  
  258.  
  259. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement