| 2023-04-02

Adding to Removing from Traversing and Reversing the Linked List

    Read my previous tutorial on linked lists here.

    Now that we have a basic implementation of a linked list, let's expand its functionality with additional methods for adding to, removing from, traversing, and reversing the list.

    Add a new method prepend to add a node to the beginning of the list:

    function createLinkedList() {
    // ... previous code ...
    
    prepend: function (data) {
    const newNode = createNode(data);
    newNode.next = this.head;
    this.head = newNode;
    },
    
    // ... remaining code ...
    }
    
    javascript

    Add a method remove to delete a node with the specified data from the list:

    function createLinkedList() {
    // ... previous code ...
    
    remove: function (data) {
    if (!this.head) {
    return;
    }
    
        if (this.head.data === data) {
          this.head = this.head.next;
          return;
        }
    
        let currentNode = this.head;
        while (currentNode.next && currentNode.next.data !== data) {
          currentNode = currentNode.next;
        }
    
        if (currentNode.next) {
          currentNode.next = currentNode.next.next;
        }
    
    },
    
    // ... remaining code ...
    }
    
    javascript

    Add a method find to search for a node with the specified data and return it:

    function createLinkedList() {
    // ... previous code ...
    
    find: function (data) {
    let currentNode = this.head;
    while (currentNode && currentNode.data !== data) {
    currentNode = currentNode.next;
    }
    
        return currentNode;
    
    },
    
    // ... remaining code ...
    }
    
    javascript

    Add a method reverse to reverse the order of the nodes in the list:

    function createLinkedList() {
      // ... previous code ...
    
      // Add a reverse method to the linked list
      reverse: function () {
        // Initialize the previousNode variable as null
        let previousNode = null;
        // Set the currentNode variable to the head of the linked list
        let currentNode = this.head;
    
        // Iterate through the linked list until currentNode becomes null
        while (currentNode) {
          // Store the next node in the list in the variable nextNode
          const nextNode = currentNode.next;
          // Set the currentNode's next pointer to point to the previous node
          currentNode.next = previousNode;
          // Move the previousNode pointer to the current node
          previousNode = currentNode;
          // Move the currentNode pointer to the next node
          currentNode = nextNode;
        }
    
        // Update the head of the linked list to be the previousNode (the new head)
        this.head = previousNode;
    
      },
    
      // ... remaining code ...
    }
    
    
    javascript

    Now, let's use the new methods with our linked list:

    const myList = createLinkedList();
    myList.append("Alice");
    myList.append("Bob");
    myList.prepend("Charlie");
    myList.printList(); // Outputs: Charlie, Alice, Bob
    
    myList.remove("Alice");
    myList.printList(); // Outputs: Charlie, Bob
    
    const foundNode = myList.find("Bob");
    console.log(foundNode); // Outputs: { data: 'Bob', next: null }
    
    myList.reverse();
    myList.printList(); // Outputs: Bob, Charlie
    
    javascript

    In this follow-up tutorial, we added new methods to our linked list implementation. The prepend method adds a node to the beginning of the list, the remove method deletes a node with the specified data, the find method searches for a node with the specified data and returns it, and the reverse method reverses the order of the nodes in the list.

    Check out the previous tutorial on linked lists here.


    Thanks for reading. If you enjoyed this post, I invite you to explore more of my site. I write about web development, programming, and other fun stuff.