HaniiPuppy

haniilinkedlist_1.js

Oct 9th, 2017
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class LinkedListNode
  2. {
  3.     constructor(contents, previous, next)
  4.     {
  5.         this.contents = contents;
  6.         this.previous = previous;
  7.         this.next = next;
  8.     }
  9.  
  10.     var contents;
  11.     var previous;
  12.     var next;
  13. }
  14.  
  15. class LinkedList
  16. {
  17.     constructor()
  18.     {
  19.         head = null;
  20.         tail = null;
  21.         size = 0;
  22.     }
  23.  
  24.     var head;
  25.     var tail;
  26.     var size;
  27.    
  28.     function say(text)
  29.     { return text + " (huzzah)"; }
  30.    
  31.     function getNodeAt(index)
  32.     {
  33.         if((index < 0) || (index >= size)) return null;
  34.        
  35.         var distanceFromStart = index;
  36.         var distanceFromEnd = (size - 1) - index;
  37.        
  38.         if(distanceFromStart <= distanceFromEnd)
  39.         {
  40.             var current = head;
  41.        
  42.             for(i = 0; i < index; i++)
  43.                 current = head.next;
  44.            
  45.             return current;
  46.         }
  47.         else
  48.         {
  49.             var current = tail;
  50.            
  51.             for(int i = size - 1; i > index; i--)
  52.                 current = tail.previous;
  53.                
  54.             return current;
  55.         }
  56.     }
  57.    
  58.     function getAt(index)
  59.     {
  60.         var node = getNodeAt(index);
  61.        
  62.         if(!node) return null;
  63.        
  64.         return getNodeAt(index).contents;
  65.     }
  66.    
  67.     function add(obj)
  68.     {
  69.         if(!tail) // If the list is empty
  70.         {
  71.             var newTail = new LinkedListNode(obj, null, null);
  72.             head = newTail;
  73.             tail = newTail;
  74.             size = 1;
  75.             return true;
  76.         }
  77.    
  78.         var newTail = new LinkedListNode(obj, tail, null);
  79.         tail.next = newTail;
  80.         tail = newNode;
  81.         size++;
  82.         return true;
  83.     }
  84.    
  85.     function addAt(obj, index)
  86.     {
  87.         if(index < 0 || index > size)
  88.             return false;
  89.    
  90.         if(size == 0)
  91.         {
  92.             var newTail = new LinkedListNode(obj, null, null);
  93.             head = newTail;
  94.             tail = newTail;
  95.             size = 1;
  96.             return true;
  97.         }
  98.        
  99.         if(index == 0)
  100.         {
  101.             var newHead = new LinkedListNode(obj, null, head);
  102.             head.previous = newHead;
  103.             head = newHead;
  104.             size++;
  105.             return true;
  106.         }
  107.        
  108.         if(index == size)
  109.         {
  110.             var newTail = new LinkedListNode(obj, tail, null);
  111.             tail.next = newTail;
  112.             tail = newNode;
  113.             size++;
  114.             return true;
  115.         }
  116.        
  117.         var previousAt = getNodeAt(index);
  118.         var newNode = new LinkedListNode(obj, previousAt.previous, previousAt);
  119.         previousAt.previous.next = newNode;
  120.         previousAt.previous = newNode;
  121.         size++;
  122.         return true;
  123.     }
  124.    
  125.     function remove(obj)
  126.     {
  127.         var current = head;
  128.        
  129.         if(!current) return false;
  130.    
  131.         for(;;)
  132.         {
  133.             if(current.contents == obj)
  134.             {
  135.                 current.previous.next = current.next;
  136.                 current.next.previous = current.previous;
  137.                 size--;
  138.                 return true;
  139.             }
  140.         }
  141.        
  142.         return false;
  143.     }
  144.    
  145.     function removeAt(index)
  146.     {
  147.         var current = getNodeAt(index);
  148.        
  149.         if(!current) return false;
  150.        
  151.         current.previous.next = current.next;
  152.         current.next.previous = current.previous;
  153.         size--;
  154.         return true;
  155.     }
  156.    
  157.     function forEach(passedFunction)
  158.     {
  159.         if(!head) return;
  160.    
  161.         var current = head;
  162.    
  163.         for(i = 0;; i++)
  164.         {
  165.             if(passedFunction(current.contents) == false) return;
  166.             current = current.next;
  167.             if(!current) return;
  168.         }
  169.     }
  170.    
  171.     function toArray()
  172.     {
  173.         var result = new Array(size);
  174.         var current = head;
  175.        
  176.         for(i = 0; current; i++)
  177.         {
  178.             result[i] = current.contents;
  179.             current = current.next;
  180.         }
  181.     }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment