From a78aa11881459d693dafb9a069820c6a819e1ceb Mon Sep 17 00:00:00 2001 From: Manish Date: Fri, 25 Aug 2023 11:16:11 +1000 Subject: [PATCH] Data Structures: Search within a Linked List --- Data Structures/linkedListClassSearch.js | 86 ++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Data Structures/linkedListClassSearch.js diff --git a/Data Structures/linkedListClassSearch.js b/Data Structures/linkedListClassSearch.js new file mode 100644 index 0000000..0eba88b --- /dev/null +++ b/Data Structures/linkedListClassSearch.js @@ -0,0 +1,86 @@ +// 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 +}