// https://www.freecodecamp.org/learn/coding-interview-prep/data-structures/search-within-a-linked-list function LinkedList() { var length = 0; var head = null; var Node = function (element) { this.element = element; this.next = null; }; this.size = function () { return length; }; this.head = function () { return head; }; this.add = function (element) { var node = new Node(element); if (head === null) { head = node; } else { var currentNode = head; while (currentNode.next) { currentNode = currentNode.next; } currentNode.next = node; } length++; }; this.remove = function (element) { var currentNode = head; var previousNode; if (currentNode.element === element) { head = currentNode.next; } else { while (currentNode.element !== element) { previousNode = currentNode; currentNode = currentNode.next; } previousNode.next = currentNode.next; } length--; }; // Only change code below this line this.isEmpty = () => { return head === null; }; this.indexOf = (element) => { let i = 0; let node = head; while (node !== null && node.element !== element) { i++; node = node.next; } if (node === null) return -1; return i; }; this.elementAt = (index) => { if (index < 0 || index >= length || head === null) { return undefined; } let i = 0; let node = head; while (i < index && node !== null) { i++; node = node.next; } if (i != index) { return undefined; } return node.element; }; // Only change code above this line }