πŸ“’
SDV503
  • SDV503
  • Command Prompt
    • Windows Command Prompt
    • Mac OS Terminal
  • GIT & GITHub
    • GitHub
    • Git
      • Git Workflow
        • Forking Workflow
  • README
    • How to write a readme.md file?
    • Write a better README.me
    • Generate a README for GitHub Repo Quickly
  • Code-comments
    • Clean Comments
    • Writing Comments in a Good way
  • Pair Coding
    • What is Pair Coding?
    • Pair Programming Experience
  • Programming?
    • What is Programming?
    • What Is A Programming Paradigm?
    • JavaScript Programming Paradigms
  • Number Systems
    • Decimal and Binary numbers
  • JavaSCript
    • Introduction To JavaScript
      • The JavaScript Engine
  • JS Call Stack
    • JavaScript call stack
    • JavaScript & Memory
      • Memory Leaks in JavaScript
    • Execution Context and Execution Stack in Javascript
      • Javascript Execution Context and Hoisting
  • JavaScript Variables
    • Introduction to JS Data Types
    • Primitive and Non-Primitive
    • Operator precedence and associativity
      • JS Operators Part One
      • JS Operators Part Two
      • JS Operators Part Three
    • Clean Code for JS Variables
  • JavaScript Scopes
    • Scope (Chain) Visualized
  • Javascript β€Šβ€”β€Šthis keyword
  • JavaScript Data Types
    • More JavaScript Data Types
  • JavaScript Expressions and Statements
  • if/else, switch and ternary operator
    • If/Else statement
  • Switch Statement
  • Ternary Operator
  • JavaScript Loops
    • Loops in JavaScript
      • Trouble With Loops
  • Objects
    • JavaScript Objects
      • Prototypal Inheritance Visualized
      • JavaScript Number Object
      • JavaScript String Object
  • Functions
    • JavaScript Function Part One
    • JavaScript Function Part Two
    • Immediately Invoked Function Expressions ~ IIFE
    • JS => Arrow Functions
    • JavaScript Callback
    • Hoisting in JavaScript
      • Hoisting Visualized
    • Recursion Functions
    • Curry and Function Composition
  • JavaScript Features
    • JSpread Operator
    • JavaScript Built-in Functions & Objects
  • Data Structures&Algorithms
    • JavaScript’s Data Types
    • Data Structures in JavaScript
      • Introduction to Big O Notation
      • Big O Notation in Javascript
      • Linked Lists
        • Linked Lists β€” 2
      • Hash Tables
      • Stack & Queue
  • TLDR
    • Single quotes (β€˜ ’) and double quotes (β€œ ”) in JavaScript
  • ES6
    • Generators and Iterators
    • Javascript Classes
    • JavaScript closures
    • JavaScript Promises & Async/Await
      • Event Loop Visualized
  • C#
    • What does C#? (C Sharp)
    • C# vs JavaScript
    • What Is The Difference Between C#, .NET, ASP.NET, Microsoft.NET, and Visual Studio?
    • What is the .NET Framework?
    • Methods and Properties of Console Class in C#
    • Datatypes in C#
    • C# Code Comments
    • The if statement
    • The switch statement
    • Loops
    • Comparison operators
    • Addition assignment operators
    • The String Interpolation Operator
    • Arrays
    • Lists
    • Dictionaries
Powered by GitBook
On this page
  • Introduction
  • Core
  • ⚜️ The list
  • Lets’ begin!!
  • πŸ”… Append
  • πŸ”… AppendAt
  • πŸ”… Remove
  • πŸ”… RemoveAt
  • πŸ”… Reverse
  • πŸ”… Swap
  • πŸ”… isEmpty & Length
  • πŸ”… Traverse
  • πŸ”… Display
  • πŸ”… Search
  • Practice

Was this helpful?

  1. Data Structures&Algorithms
  2. Data Structures in JavaScript

Linked Lists

PreviousBig O Notation in JavascriptNextLinked Lists β€” 2

Last updated 5 years ago

Was this helpful?

Introduction

A Linked List is a linear collection of data elements, called nodes, pointing to the neighbouring node by means of pointer.

Under the simplest form, each node is composed of data and a reference (in other words, a link) to the next node or previous node in the sequence.

⚠️ If you wan’t to learn more about linked-lists .

Core

The most important part of a linked list is a node. It consist of two things β€”

  1. Data

  2. Pointers In Single Linked Lists there is only one pointer (next ) but in Double Linked lists there are two pointers (prev & next ). There can be more than two pointers also. It totally depends on your purpose of creating them.

this while loop is the one on which 75% of linkedLists depends…

Whenever we create an instance of our LinkedList class, the constructor executes and it create a head node with both data and next as null. Then we use its append method to insert items into this list. In this post, we will go through the following methods/operations on Linked Lists β€”

⚜️ The list

  1. Append

  2. AppendAt

  3. Remove

  4. RemoveAt

  5. Reverse

  6. Swap

  7. IsEmpty & Length

  8. Traverse

  9. Display

  10. Search

and a lot more… So, without further ado…

Lets’ begin!!

Initial List

❗️All the code snippets you will see below are just Pseudo code.

πŸ”… Append

append( item ) {
  let current = this.head;
  let newNode = new Node(item)
  while( current.next !== null ) {
    current = current.next
  }
  current.next = newNode;
  return true;
 }

Append Operation

πŸ”… AppendAt

appendAt( pos, item ) {
  let counter = 0;
  let current = this.head;
  let newNode = new Node(item);
  while( current.next !== null ) {
    if( counter === pos ){
      newNode.next = current.next
      current.next = newNode
      return true;
    }
    current = current.next
    counter++;
  }
  return false;
 }

AppendAt Operation

πŸ”… Remove

remove( item ) {
   let current = this.head;
   while( current !== null ) {
     let previous = current;
     current = current.next;
     if( current.data === item ) {
       previous.next = current.next;
       return true;
     }
   }
   return false;
 }

Remove Operation

πŸ”… RemoveAt

removeAt( pos ) {
  let counter = 0;
  let current = this.head;
  while( current !== null ) {
    let previous = current;
    current = current.next
    if( counter === pos ){
      previous.next = current.next;
      return true;
    }
    counter++;
  }
  return false;
 }

RemoveAt Operation

πŸ”… Reverse

reverse() {
   let current = this.head.next;
   let prev = null;
   let next;
   while(current !== null) {
     next = current.next
     current.next = prev
     prev = current
     current = next
   }
   this.head.next = prev
   return true
 }

Reverse Operation

It is easy to understand what we see instead of what we read. So, If the mechanism of this reverse function is still unclear to you, I have made a gif in order to show you how the execution goes.

pffff….finally I made it after spending 3 hours in just dragging and dropping.. but hope so it will help you :)

πŸ”… Swap

swap( nodeOne, nodeTwo ) {
  let current = this.head;
  let counter = 0;
  let firstNode;
  while( current !== null ) {
    current = current.next;
    if( counter == nodeOne ){
      firstNode = current;
    } else if( counter == nodeTwo ) {
      let temp = current.data;
      current.data = firstNode.data;
      firstNode.data = temp;
    }
    counter++;
  }
  return true
 }

Swap Operation

πŸ”… isEmpty & Length

length() {
  let current = this.head;
  let counter = 0;
  while( current.next !== null ) {
    current = current.next
    counter++;
  }
  return counter;
}isEmpty() {
  return this.length() < 1
}

IsEmpty & Length Operation

πŸ”… Traverse

If you want to execute a function over each node, then you can use traverse. Just pass the function as shown in the example β€”

traverse( fn ) {
  let current = this.head;
  while( current.next !== null ) {
    fn(current)
    current = current.next;
  }
  return true;
 }

Traverse Operation

πŸ”… Display

display() {
  let current = this.head;
  let elements = [];
  while( current !== null ) {
   elements.push( current.data );
   current = current.next
  }
  return elements.join(" ");
}

Display Operation

πŸ”… Search

search( item ) {
   let current = this.head.next;
   let counter = 0;   while( current ) {
     if( current.data == item ) {
      return counter
     }
     current = current.next
     counter++
   }
   return false;
}

Search Operation

There are still a lot of things that we can do with linked-lists. Never stop doing practice. Explore yourself and think of problems by yourself. The more you think of problems β€” the more you brain will create links with Data Structures.

Practice

Hackerrank

GeekForGeeks

LeetCode

Data Structures β€” Linked Lists
Data Structures
Linked Lists
click here