linkedlist
npm install dori.linkedlist
A linked list is a linear collection of data elements, in which linear order is not given by their physical placement in memory. Instead, each element points to the next.
``shell`
$ npm i dori.linkedlist
`typescript
import { LinkedListNode } from 'dori.linkedlist'
const node1 = new LinkedListNode(1) // {value: 1, next: null}
const node2 = new LinkedListNode(2, node1) // {value: 2, next: node1}
`
`typescript
import { LinkedList } from 'dori.linkedlist'
const list1 = new LinkedList() // empty LinkedList
const list2 = LinkedList.from([1,2,3]) // create from an array, LinkedListNode(1) -> LinkedListNode(2) -> LinkedListNode(3)
`
`typescript
import { LinkedList } from 'dori.linkedlist'
const list = LinkedList.from([1,2,3]) // create from an array, LinkedListNode(1) -> LinkedListNode(2) -> LinkedListNode(3)
list.find(node => node.value === 1) // return LinkedListNode(1)
list.find(node => node.value === 4) // return null
`
`typescript
import { LinkedList, LinkedListNode } from 'dori.linkedlist'
const list = new LinkedList
list.prepend(1) // LinkedListNode(1)
list.prepend(new LinkedListNode(2)) // LinkedListNode(2) -> LinkedListNode(1)
list.prepend(new LinkedListNode(3)) // LinkedListNode(3) -> LinkedListNode(2) -> LinkedListNode(1)
list.toArray() // [3,2,1]
`
`typescript
import { LinkedList, LinkedListNode } from 'dori.linkedlist'
const list = new LinkedList
list.append(1) // LinkedListNode(1)
list.append(new LinkedListNode(2)) // LinkedListNode(1) -> LinkedListNode(2)
list.append(new LinkedListNode(3)) // LinkedListNode(1) -> LinkedListNode(2) -> LinkedListNode(3)
list.toArray() // [1, 2, 3]
`
`typescript
import { LinkedList, LinkedListNode } from 'dori.linkedlist'
const list = new LinkedList
list.append(1) // LinkedListNode(1)
list.append(new LinkedListNode(2)) // LinkedListNode(1) -> LinkedListNode(2)
list.insert(new LinkedListNode(3), 1) // LinkedListNode(1) -> LinkedListNode(3) -> LinkedListNode(2)
list.toArray() // [1, 3, 2]
`
`typescript
import { LinkedList } from 'dori.linkedlist'
const list = LinkedList.from([1,2,3])
list.remove(node => node.value === 2) // return LinkedListNode(2), list becomes into LinkedListNode(1) -> LinkedListNode(3)
list.toArray() // [1,3]
`
`typescript
import { LinkedList } from 'dori.linkedlist'
const list = LinkedList.from([1,2,3])
list.reverse() // LinkedListNode(3) -> LinkedListNode(2) -> LinkedListNode(1)
list.toArray() // [3,2,1]
`
`typescriptcompare
/**
* node of linked list
*
* @template T - node value type
*/
declare class LinkedListNode
value: T;
next: LinkedListNode
/**
* @param {T} value - node value
* @param {LinkedListNode
*/
constructor(value: T, next?: LinkedListNode
}
/**
* linked list
*
* @template T - linked list node value type
*/
declare class LinkedList
private _head;
private _tail;
private _size;
private _wrapper;
/**
* create LinkedList from array, T = O(n)
*
* @template T
* @param {T[]} values - node value set
* @returns {LinkedList
*/
static from
constructor();
/**
* find node, T = O(n)
*
* @param {LinkedListNodecompare
* @returns {LinkedListNode
*/
find(compare: (node: LinkedListNode
/**
* insert a new node before linked list head node, T = O(1)
*
* @param {T | LinkedListNode
*/
prepend(value: T | LinkedListNode
/**
* insert a new node after linked list tail node, T = O(1)
*
* @param {T | LinkedListNode
*/
append(value: T | LinkedListNode
/**
* insert a new node before nth node, T = O(n)
*
* @param {number} index - index to insert \
* if index <= 0, value will be inserted before head node \
* if index >= list size, value will be insert after tail node
* @param {T | LinkedListNode
*/
insert(index: number, value: T | LinkedListNode
/**
* remove node, T = O(n)
*
* @param {(node: LinkedListNode will be removed``
* @returns {LinkedListNode
*/
remove(compare: (node: LinkedListNode
/**
* reverse a linked list, T = O(n)
*
* @returns {LinkedList
*/
reverse(): void;
/**
* get head node
*
* @returns {LinkedListNode
*/
head(): LinkedListNode
/**
* get tail node
*
* @returns {LinkedListNode
*/
tail(): LinkedListNode
/**
* get list size
*
* @returns {number}
*/
size(): number;
/**
* transform to array, T = O(n)
*
* @returns {T[]}
*/
toArray(): T[];
}