Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hedronium/linkedlist.js
A Javascript implementation of the LinkedList
https://github.com/hedronium/linkedlist.js
Last synced: 3 days ago
JSON representation
A Javascript implementation of the LinkedList
- Host: GitHub
- URL: https://github.com/hedronium/linkedlist.js
- Owner: hedronium
- Created: 2016-01-06T15:00:09.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2017-12-14T16:19:54.000Z (almost 7 years ago)
- Last Synced: 2024-04-26T13:40:22.573Z (7 months ago)
- Language: JavaScript
- Size: 11.7 KB
- Stars: 7
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
#LinkedList.js
A simple doubly linked list implementation in Javascript.## Installation
```
npm install linkedlist-js
```## Usage
require the module...```javascript
var List = require('linkedlist-js').List;
```instantiate a List object...
```javascript
var list = new List();// PUSH!
list.push('HUEHUE');
```### Traversing the List
#### with each(callback)
```javascript
list.each(function (index, node) {
console.log(index + ': ' + node.value());
});
```#### like a badass
```javascript
var node = list.head();while (node != null) {
console.log(node.value());
node = node.next();
}
```## `List` API
### Adding Nodes
#### push(value)
Creates a node with the value specified, adds it to the end of the list and returns the `Node` object.```javascript
var a = list.push('A');
a.value(); //'A'
```#### unshift(value)
Creates a node with the value specified, adds it to the beginning of the list and returns the `Node` object.```javascript
var b = list.unshift('B');
b.value(); //'B'
```### Accessing Nodes
#### pop
Returns the tail `Node` and removes it from the list.
```
var list = new List();
list.push('A');
list.push('B');list.pop().value(); //'B'
```#### shift
Returns the head `Node` and removes it from the list.
```
var list = new List();
list.push('A');
list.push('B');list.shift().value(); //'A'
```#### removeNode(node)
Remove a specific `Node` (An _O(1)_ complexity action in linked lists)
```
var list = new List();
list.push('A');
list.push('B');
list.push('C');
var node = list.find('B');
list.removeNode(node);
list.count(); // 2
list.get(0).value(); // 'A'
list.get(1).value(); // 'C';
```#### get(index)
Returns the `Node` at the specified index. _(Linear Lookup, not very performant)_
```javascript
var list = new List();
list.push('A');
list.push('B');
list.push('C');list.get(1).value(); //'B'
```### Peeking
#### head()
Returns the head `Node` or `null` in list is empty
```javascript
var list = new List();
var node_a = list.push('A');
var node_b = list.push('B');list.head() === node_a; // true
```#### tail()
Returns the tail `Node` or `null` in list is empty
```javascript
var list = new List();
var node_a = list.push('A');
var node_b = list.push('B');list.tail() === node_b; // true
```### Searching
#### find(value)
Find the node with the specified value and returns it. _(Linear search, not very performant)_
```javascript
var list = new List();
list.push('A');
var node_b = list.push('B');list.find('B') === node_b; // true
```### Misc
#### set(index, value)
Sets the value of the `Node` at the specifiec index.
```javascript
var list = new List();
list.push('A');list.set(0, 'B');
list.head().value(); // 'B'
```#### count()
Returns the number of `Node`s in the list.
```javascript
var list = new List();
list.push('A');
list.push('B');list.count(); // 2
```#### isEmpty()
Returns `true` if list has no `Node`s and `false` if otherwise.
```javascript
var list = new List();
list.isEmpty(); // truelist.push('A');
list.isEmpty(); // false
```#### truncateTo(length)
Truncates the list to the specified size.
```
var list = new List();
list.push('A');
list.push('B');list.truncateTo(1);
list.count(); // 1
```#### empty()
Same as calling `truncateTo(0)`. Empties the list.
```
var list = new List();
list.push('A');
list.push('B');list.empty();
list.count(); // 0
list.isEmpty(); // true
```### asArray()
Returns the list as an Array.
```javascript
var list = new List();
list.push('A');
list.push('B');list.asArray(); // ['A', 'B']
```## `Node` API
### Getters
#### value()
Returns the value of the `Node`#### previous()
Returns the previous `Node` in the list of `null` if the node is the forst `Node`.#### next()
Returns the next `Node` in the list of `null` if the node is the last `Node`.### Setters
#### set(value)
Sets the value of the node
```
var node = new Node();
node.set('A');node.value(); // 'A'
```#### setPrevious(`Node` node)
Sets the previous pointer of the `Node`
```
var node_a = new Node();
var node_b = new Node();
node_b.setPrevious(node_a);node_b.previous() === node_a; // true
```#### setNext(`Node` node)
Sets the next pointer of the `Node`
```
var node_a = new Node();
var node_b = new Node();
node_a.setNext(node_b);node_a.next() === node_b; // true
```### Misc
#### isHead()
Retunrs true if the node is the first node in the list.
```javascript
var list = new List();
list.push('A');
list.push('B');list.head().isHead(); // true
```#### isTail()
Retunrs true if the node is the last node in the list.
```javascript
var list = new List();
list.push('A');
list.push('B');list.tail().isTail(); // true
```## Running Tests
```
npm test
```if you have mocha installed, you may also run
```
mocha tests
```