Coder Social home page Coder Social logo

data-structures's Introduction

data-structures

Common data stuctures implementations in JS

Linked Lists

// Linked list has 2 advantages
// 1. Efficency in resizing
// 2. Efficency when adding an element in the start/end of the list.

class LinkedList {
  constructor () {
    this.head = null
    this.tail = null
  }
  prepend (value) {
  	const newNode = { value, next: this.head}
    
    if (!this.head) {
      this.tail = newNode
    }
    
    this.head = newNode
    
  }
  append (value) {
  	const newNode = {
      value,
      next: null
    }
    if (this.tail) {
      this.tail.next = newNode
    }
    this.tail = newNode
    
    if (!this.head) this.head = newNode
  }
  
  find (value) {
  	if (!this.head) {
      return null
    }
    
    let curNode = this.head
    
    while (curNode) {
      if (curNode.value === value) {
      	return curNode
      }
      
      curNode = curNode.next
    }
    
    return null
  }
  
  insertAfter (value, afterValue) {
  	const existingNode = this.find(afterValue)
    
    if (existingNode) {
      const newNode = { value, next: existingNode.next }
      existingNode.next = newNode
    }
  }
  
  delete (value) {
  	if (!this.head) return null
    
    while (this.head && this.head.value === value) {
   	  this.head= this.head.next
    }
    
    let curNode = this.head
    
    while (curNode.next) {
      if (curNode.next.value === value) {
      	curNode.next = curNode.next.next
      } else {
      	curNode = curNode.next
      }
    }
    
    if (this.tail.value === value) {
      this.tail = curNode
    }
  }
  
  toArray () {
  	const elements = []
    
  	let curNode = this.head;
    
    while (curNode) {
      elements.push(curNode.value)
      curNode = curNode.next
    }
    
    return elements
  }
}


const list = new LinkedList()
list.prepend("Rasul")
list.append("Rasul")
list.append(1)
list.append("Rasul")

console.log(list.toArray(), "initial")

list.delete("Rasul")

list.append("hey")
list.insertAfter("insertedValue", 1)
console.log(list.toArray(), "end")

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.