7.8 KiB
Linked List
Singly linked list.
Usage
var linkedList = require( '@stdlib/utils/linked-list' );
linkedList()
Returns a new linked list instance.
var list = linkedList();
// returns <LinkedList>
list.clear()
Clears a list.
var list = linkedList();
// returns <LinkedList>
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Peek at the first value:
var v = list.first().value;
// returns 'foo'
// Examine the list length:
var len = list.length;
// returns 2
// Clear all list items:
list.clear();
// Peek at the first value:
v = list.first();
// returns undefined
// Examine the list length:
len = list.length;
// returns 0
list.first()
Returns the first node
. If the list is currently empty, the returned value is undefined
.
var list = linkedList();
// returns <LinkedList>
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Peek at the first value:
var v = list.first().value;
// returns 'foo'
list.insert( node, value )
Inserts a value
into the list after a provided list node
.
var list = linkedList();
// returns <LinkedList>
// Add values to the list:
list.push( 'foo' ).push( 'bar' ).push( 'beep' );
// Determine the list length:
var len = list.length;
// returns 3
// Get the second node:
var node = list.first().next;
// Insert a value after the second node:
list.insert( node, 'boop' );
// Determine the list length:
len = list.length;
// returns 4
list.iterator()
Returns an iterator for iterating over a list. If an environment supports Symbol.iterator
, the returned iterator is iterable.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Create an iterator:
var it = list.iterator();
// Iterate over the list...
var v = it.next().value;
// returns 'foo'
v = it.next().value;
// returns 'bar'
var bool = it.next().done;
// returns true
Note: in order to prevent confusion arising from list mutation during iteration, a returned iterator always iterates over a list "snapshot", which is defined as the list of list elements at the time of list.iterator()
invocation.
list.last()
Returns the last node
. If the list is currently empty, the returned value is undefined
.
var list = linkedList();
// returns <LinkedList>
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Peek at the last value:
var v = list.last().value;
// returns 'bar'
list.length
List length.
var list = linkedList();
// Examine the initial list length:
var len = list.length;
// returns 0
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Retrieve the current list length:
len = list.length;
// returns 2
list.pop()
Removes a value from the end of the list. If the list is currently empty, the returned value is undefined
.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Remove the last value:
var v = list.pop();
// returns 'bar'
// Add a new value to the list:
list.push( 'beep' );
// Remove the last value:
v = list.pop();
// returns 'beep'
list.push( value )
Adds a value to the end of the list.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Remove the last value:
var v = list.pop();
// returns 'bar'
// Add a new value to the list:
list.push( 'beep' );
// Remove the last value:
v = list.pop();
// returns 'beep'
list.remove( node )
Removes a node
from the list.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' ).push( 'beep' );
// Determine the list length:
var len = list.length;
// returns 3
// Get the second node:
var node = list.first().next;
// Remove the second node:
var v = list.remove( node );
// returns 'bar'
// Determine the list length:
len = list.length;
// returns 2
list.shift()
Removes a value from the beginning of the list. If the list is currently empty, the returned value is undefined
.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Remove the first value:
var v = list.shift();
// returns 'foo'
// Add a new value to the list:
list.push( 'beep' );
// Remove the first value:
v = list.shift();
// returns 'bar'
list.toArray()
Returns an array of list values.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Get an array of list values:
var vals = list.toArray();
// returns [ 'foo', 'bar' ]
list.toJSON()
Serializes a list as JSON.
var list = linkedList();
// Add values to the list:
list.push( 'foo' ).push( 'bar' );
// Serialize to JSON:
var o = list.toJSON();
// returns { 'type': 'linked-list', 'data': [ 'foo', 'bar' ] }
Note: JSON.stringify()
implicitly calls this method when stringifying a list instance.
list.unshift( value )
Adds a value to the beginning of the list.
var list = linkedList();
// Add values to the list:
list.unshift( 'foo' ).unshift( 'bar' );
// Remove the last value:
var v = list.pop();
// returns 'foo'
// Add a new value to the list:
list.unshift( 'beep' );
// Remove the last value:
v = list.pop();
// returns 'bar'
Examples
var linkedList = require( '@stdlib/utils/linked-list' );
var list;
var iter;
var len;
var v;
var i;
// Create a new linked list:
list = linkedList();
// Add some values to the list:
list.push( 'foo' );
list.push( 'bar' );
list.push( 'beep' );
list.push( 'boop' );
// Peek at the first and last list values:
v = list.first().value;
// returns 'foo'
v = list.last().value;
// returns 'boop'
// Inspect the list length:
len = list.length;
// returns 4
// Remove the last list value:
v = list.pop();
// returns 'boop'
// Inspect the list length:
len = list.length;
// returns 3
// Iterate over the list:
iter = list.iterator();
for ( i = 0; i < len; i++ ) {
console.log( 'List value #%d: %s', i+1, iter.next().value );
}
// Clear the list:
list.clear();
// Inspect the list length:
len = list.length;
// returns 0