GithubHelp home page GithubHelp logo

linked-list's Introduction

linked-list

Build Coverage Downloads Size

Small double linked list.

Install

npm:

npm install linked-list

Use

var LinkedList = require('linked-list')

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()
var item3 = new LinkedList.Item()
var list = new LinkedList(item1, item2, item3)

list.head // => item1
list.head.next // => item2
list.head.next.next // => item3
list.head.next.prev // => item1
list.tail // => item3
list.tail.next // => `null`

Subclassing:

var inherits = require('inherits')
var List = require('linked-list')

Tokens.prototype.join = join
Token.prototype.toString = toString

inherits(Tokens, List)
inherits(Token, List.Item)

var dogs = new Token('dogs')
var and = new Token('&')
var cats = new Token('cats')
var tokens = new Tokens(dogs, and, cats)

tokens.join(' ') // => 'dogs & cats'

and.prepend(cats)
and.append(dogs)

tokens.join(' ') + '!' // => 'cats & dogs!'

function Tokens() {
  List.apply(this, arguments)
}

function Token(value) {
  this.value = value
  List.Item.apply(this, arguments)
}

function join(delimiter) {
  return this.toArray().join(delimiter)
}

function toString() {
  return this.value
}

API

LinkedList([items…])

new LinkedList()
new LinkedList(new LinkedList.Item(), new LinkedList.Item())

Create a new Linked List.

LinkedList.from([items])

LinkedList.from()
LinkedList.from([])
LinkedList.from([new LinkedList.Item(), new LinkedList.Item()])

Create a new this and adds the given array of items. Ignores null or undefined values. Throws an error when a given item has no detach, append, or prepend methods.

LinkedList.of([items…])

LinkedList.of()
LinkedList.of(new LinkedList.Item(), new LinkedList.Item())

Creates a new Linked List from the given arguments. Defers to LinkedList.from.

LinkedList#append(item)

var list = new LinkedList()
var item = new LinkedList.Item()

list.head === null // => true
item.list === null // => true

list.append(item)

list.head === item // => true
item.list === list // => true

Appends an item to a list. Throws an error when the given item has no detach, append, or prepend methods. Returns the given item.

LinkedList#prepend(item)

var list = new LinkedList()
var item = new LinkedList.Item()

list.prepend(item)

Prepends an item to a list. Throws an error when the given item has no detach, append, or prepend methods. Returns the given item.

LinkedList#toArray()

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()
var list = new LinkedList(item1, item2)
var array = list.toArray()

array[0] === item1 // => true
array[1] === item2 // => true
array[0].next === item2 // => true
array[1].prev === item1 // => true

Returns the items in the list in an array.

LinkedList#head

var item = new LinkedList.Item()
var list = new LinkedList(item)

list.head === item // => true

The first item in a list, and null otherwise.

LinkedList#tail

var list = new LinkedList()
var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

list.tail === null // => true

list.append(item1)
list.tail === null // => true, see note.

list.append(item2)
list.tail === item2 // => true

The last item in a list, and null otherwise. Note that a list with only one item has no tail, only a head.

LinkedList#size

var list = new LinkedList()
var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

list.size === 0 // => true

list.append(item1)
list.size === 1 // => true

list.append(item2)
list.size === 2 // => true

The number of items in the list.

LinkedList.Item()

var item = new LinkedList.Item()

Creates a new Linked List Item.

LinkedList.Item#append(item)

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

new LinkedList().append(item1)

item1.next === null // => true

item1.append(item2)
item1.next === item2 // => true

Adds the given item after the operated on item in a list. Throws an error when the given item has no detach, append, or prepend methods. Returns false when the operated on item is not attached to a list, otherwise the given item.

LinkedList.Item#prepend(item)

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

new LinkedList().append(item1)

item1.prev === null // => true

item1.prepend(item2)
item1.prev === item2 // => true

Adds the given item before the operated on item in a list. Throws an error when the given item has no detach, append, or prepend methods. Returns false when the operated on item is not attached to a list, otherwise the given item.

LinkedList.Item#detach()

var item = new LinkedList.Item()
var list = new LinkedList(item)

item.list === list // => true

item.detach()
item.list === null // => true

Removes the operated on item from its parent list. Removes references to it on its parent list, and prev and next items; relinking them when possible. Returns the operated on item. Even when it was already detached.

LinkedList.Item#next

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

new LinkedList(item1)

item1.next === null // => true
item2.next === null // => true

item1.append(item2)

item1.next === item2 // => true

item1.detach()

item1.next === null // => true

The items succeeding item, and null otherwise.

LinkedList.Item#prev

var item1 = new LinkedList.Item()
var item2 = new LinkedList.Item()

new LinkedList(item)

item1.prev === null // => true
item2.prev === null // => true

item1.append(item2)

item1.prev === item1 // => true

item2.detach()

item2.prev === null // => true

The items preceding item, and null otherwise.

LinkedList.Item#list

var item = new LinkedList.Item()
var list = new LinkedList()

item.list === null // => true

list.append(item)

item.list === list // => true

item.detach()

item.list === null // => true

The items parent list, and null otherwise.

License

MIT © Titus Wormer

linked-list's People

Contributors

blakeembrey avatar greenkeeperio-bot avatar regevbr avatar wooorm avatar

Stargazers

 avatar

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.