Quick actions

cmd+k|ctrl+k

Navigation

Languages

Data Structure - LinkedList

Snippet info

Language

JavaScript

Visibility

public

Author

bdo.appworkshop

Created

2025-07-03T15:49:54.016985Z

Updated

2025-07-03T15:49:54.016985Z

// Linked Lists

// let myLinkedList = {
//     head: {
//         value: 10,
//         next: {
//             value: 5,
//             next: {
//                 value: 16,
//                 next: null
//             }
//         }
//     }
// }

class Node {
    constructor(value) {
        this.value = value;
        this.next = null;
    }
}

class LinkedList {
    constructor(value) {
        this.head = {
            value: value,
            next: null
        }
        this.tail = this.head;
        this.length = 1;
    }
    append(value) {
        // add values to the linked list in the end
        const newNode = new Node(value);
        this.tail.next = newNode;
        this.tail = newNode;
        this.length++;
        return this;
    }
    
    prepend(value) {
        const newNode = new Node(value);
        newNode.next = this.head
        this.head = newNode
        this.length++;
        return this;
    }
    
    printList() {
        const array = [];
        let currentNode = this.head;
        while (currentNode !== null) {
            array.push[currentNode.value];
            currentNode = currentNode.next;
        }
        console.log(array);
        return array;
    }
    
    insert(index, value) {
        // check params
        if (index >= this.length) {
            return this.append(value);
        }
        
        const newNode = new Node(value);
        
        const leader = this.traverseToIndex(index-1);
        const holdingPointer = leader.next;
        leader.next = newNode;
        newNode.next = holdingPointer;
        this.length++;
        return this.printList();
    }
    
    traverseToIndex(index) {
        // check params
        let counter = 0;
        let currentNode = this.head;
        while (counter !== index) {
            currentNode = currentNode.next;
            counter++;
        }
        return currentNode;
    }
    
    remove(index) {
        // check params
        const leader = this.traverseToIndex(index-1);
        const unwantedNode = leader.next;
        leader.next = unwantedNode.next;
        this.length--;
        return this.printList();
    }
    
    reverse() {
      if (!this.head.next) {
        return this.head;
      }
      let first = this.head;
      this.tail = this.head;
      let second = first.next;
  
      while(second) {
        const temp = second.next;
        second.next = first;
        first = second;
        second = temp;
      }
  
      this.head.next = null;
      this.head = first;
      return this.printList();
    }
}

const myLinkedList = new LinkedList(10);
myLinkedList.append(2);
myLinkedList.prepend(9);
myLinkedList.insert(2, 99);
myLinkedList.remove(2);
myLinkedList.printList();
INFO