Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LinkedListNode
- {
- constructor(contents, previous, next)
- {
- this.contents = contents;
- this.previous = previous;
- this.next = next;
- }
- var contents;
- var previous;
- var next;
- }
- class LinkedList
- {
- constructor()
- {
- head = null;
- tail = null;
- size = 0;
- }
- var head;
- var tail;
- var size;
- function say(text)
- { return text + " (huzzah)"; }
- function getNodeAt(index)
- {
- if((index < 0) || (index >= size)) return null;
- var distanceFromStart = index;
- var distanceFromEnd = (size - 1) - index;
- if(distanceFromStart <= distanceFromEnd)
- {
- var current = head;
- for(i = 0; i < index; i++)
- current = head.next;
- return current;
- }
- else
- {
- var current = tail;
- for(int i = size - 1; i > index; i--)
- current = tail.previous;
- return current;
- }
- }
- function getAt(index)
- {
- var node = getNodeAt(index);
- if(!node) return null;
- return getNodeAt(index).contents;
- }
- function add(obj)
- {
- if(!tail) // If the list is empty
- {
- var newTail = new LinkedListNode(obj, null, null);
- head = newTail;
- tail = newTail;
- size = 1;
- return true;
- }
- var newTail = new LinkedListNode(obj, tail, null);
- tail.next = newTail;
- tail = newNode;
- size++;
- return true;
- }
- function addAt(obj, index)
- {
- if(index < 0 || index > size)
- return false;
- if(size == 0)
- {
- var newTail = new LinkedListNode(obj, null, null);
- head = newTail;
- tail = newTail;
- size = 1;
- return true;
- }
- if(index == 0)
- {
- var newHead = new LinkedListNode(obj, null, head);
- head.previous = newHead;
- head = newHead;
- size++;
- return true;
- }
- if(index == size)
- {
- var newTail = new LinkedListNode(obj, tail, null);
- tail.next = newTail;
- tail = newNode;
- size++;
- return true;
- }
- var previousAt = getNodeAt(index);
- var newNode = new LinkedListNode(obj, previousAt.previous, previousAt);
- previousAt.previous.next = newNode;
- previousAt.previous = newNode;
- size++;
- return true;
- }
- function remove(obj)
- {
- var current = head;
- if(!current) return false;
- for(;;)
- {
- if(current.contents == obj)
- {
- current.previous.next = current.next;
- current.next.previous = current.previous;
- size--;
- return true;
- }
- }
- return false;
- }
- function removeAt(index)
- {
- var current = getNodeAt(index);
- if(!current) return false;
- current.previous.next = current.next;
- current.next.previous = current.previous;
- size--;
- return true;
- }
- function forEach(passedFunction)
- {
- if(!head) return;
- var current = head;
- for(i = 0;; i++)
- {
- if(passedFunction(current.contents) == false) return;
- current = current.next;
- if(!current) return;
- }
- }
- function toArray()
- {
- var result = new Array(size);
- var current = head;
- for(i = 0; current; i++)
- {
- result[i] = current.contents;
- current = current.next;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment