# lucabro-linked-list

> Class to managing linked lists for web projects

Latest version **1.0.29** (published 2017-10-14) · ISC license · 0 weekly downloads

## Install

```sh
npm install lucabro-linked-list
pnpm add lucabro-linked-list
yarn add lucabro-linked-list
bun add lucabro-linked-list
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.29 |
| Published | 2017-10-14 |
| First published | 2017-01-08 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Luca Brognara |
| Maintainers | lucabro81 |
| Keywords | linked-list, infinite-scroll |

## Links

- npm: https://www.npmjs.com/package/lucabro-linked-list
- Repository: https://github.com/lucabro81/LinkedList
- Homepage: https://github.com/lucabro81/LinkedList#readme
- Issues: https://github.com/lucabro81/LinkedList/issues
- npm.io page: https://npm.io/package/lucabro-linked-list

## Dependencies (1)

- [jasmine-test-builder](https://npm.io/package/jasmine-test-builder.md) ^1.0.1

## Recent versions

- 1.0.29 (latest) — 2017-10-14
- 1.0.28 — 2017-05-04
- 1.0.27 — 2017-05-04
- 1.0.26 — 2017-05-04
- 1.0.25 — 2017-05-04
- 1.0.24 — 2017-05-04
- 1.0.22 — 2017-05-01
- 1.0.21 — 2017-05-01
- 1.0.20 — 2017-05-01
- 1.0.19 — 2017-05-01
- 1.0.18 — 2017-02-18
- 1.0.17 — 2017-02-18
- 1.0.16 — 2017-02-18
- 1.0.15 — 2017-02-18
- 1.0.14 — 2017-02-18
- … 14 more at https://npm.io/package/lucabro-linked-list/versions

## README

# TODOS
---

* create and test merge
* create and test sort
* test contain
* test pos
* test getElemAtPos
* test reduce
* test slice
* test spice
* optimize sort function
* update readme api documentation

# Install
---

    npm install lucabro-linked-list --save

# Use

---

## Import

    import {LinkedList} from "lucabro-linked-list/package/LinkedList";
    
## Documentation

### Index

 * **<a href="#Properties">Properties</a>**
   * <a href="#start">start</a>
   * <a href="#end">end</a>
   * <a href="#cloned_list">cloned_list</a>
   * <a href="#prev">prev</a>
   * <a href="#data">data</a>
   * <a href="#next">next</a>
 * **<a href="#Methods">Methods</a>**
   * <a href="#init">init(c: {new (data: any): T;}, init_data?: Array\<any\>): void</a>
   * <a href="#addElem">addElem(data: any, ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#addElemRight">addElemRight(data: any, ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#addElemLeft">addElemLeft(data: any, ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#removeElem">removeElem(elem?: T): LinkedList\<T\></a>
   * <a href="#removeElemByPos">removeElemByPos(pos: number): LinkedList\<T\></a>
   * <a href="#removeElemByData">removeElemByData(data: any): LinkedList\<T\></a>
   * <a href="#insertElem">insertElem(data: any, pos?: number): LinkedList\<T\></a>
   * <a href="#length">length(): number</a>
   * <a href="#toStart">toStart(ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#toNext">toNext(ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#toPrev">toPrev(ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#toEnd">toEnd(ll?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#get">get(): T</a>
   * <a href="#destroy">destroy(): void</a>
   * <a href="#isStart">isStart(elem?: T): boolean</a>
   * <a href="#isEnd">isEnd(elem?: T): boolean</a>
   * <a href="#clone">clone(return_cloned?: boolean): LinkedList\<T\></a>
   * <a href="#concat">concat(list_to_append: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#rMerge">rMerge(list_to_merge: LinkedList\<T\>, func?: Function): LinkedList\<T\></a>
   * <a href="#merge">merge(list_to_merge: LinkedList\<T\>, func?: Function): LinkedList\<T\></a>
   * <a href="#toArray">toArray(): Array\<any\></a>
   * <a href="#rSort">rSort(sort_func?: Function, list?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#sort">sort(sort_func?: Function, list?: LinkedList\<T\>): LinkedList\<T\></a>
   * <a href="#isEqual">isEqual(list: LinkedList\<T\>, equality_func?: (a: T, b: T) => boolean): boolean</a>

### <a name="Properties"></a>Properties

#### <a name="start"></a>start:T

Pointer to the head of the list

#### <a name="end"></a>end:T

Pointer to the end of the list

#### <a name="cloned_list"></a>cloned_list:LinkedList\<T\>

Reference to the cloned list

#### <a name="prev"></a>prev:T

Pointer to the previous element of the list with respect of the current element 

#### <a name="data"></a>data:any

Value of the current element

#### <a name="next"></a>next:T

Pointer to the next element of the list with respect of the current element 
    
### <a name="Methods"></a>Methods

#### LinkedList();
   
    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    
Constructor
   
#### <a name="init"></a>init(c: {new (data: any): T;}, init_data?: Array\<any\>): void

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType);
    
or

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    
Init list, with or without initial data

#### <a name="addElem"></a>addElem(data: any, ll?: LinkedList\<T\>): LinkedList\<T\>`

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.addElem('data4');
    
Add an element at the right of the list, alias of `addElemRight`

#### <a name="addElemRight"></a>addElemRight(data: any, ll?: LinkedList\<T\>): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.addElemRight('data4');
    
Add an element at the right of the list
    
#### <a name="addElemLeft"></a>addElemLeft(data: any, ll?: LinkedList\<T\>): LinkedList\<T\>
    
    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.addElemLeft('data4');

Add an element at the left of the list
    
#### <a name="removeElem"></a>removeElem(elem?: T): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var listElem:ElemenType = ll.get();
    ll.removeElem(listElem);
    //
    // or
    //
    ll.removeElem();
    
Remove current element or a specified one
    
#### <a name="removeElemByPos"></a>removeElemByPos(pos: number): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.removeElemByPos(1);
    
Remove element by position in the list

#### <a name="removeElemByData"></a>removeElemByData(data: any): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.removeElemByData('data2');
    
Remove element by data
    
#### <a name="insertElem"></a>insertElem(data: any, pos?: number): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.insertElem('data2', 1);
    
Add element at the specified position, without position the element will be added at the start of the list like addElemLeft`
    
#### <a name="length"></a>length(): number`

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.length(); // return 3
    
Return the length of the list
    
#### <a name="toStart"></a>toStart(): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.toStart();
    
Move the internal pointer to the head of the list
    
#### <a name="toNext"></a>toNext(): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.toNext();
    
Move the internal pointer to the next element with rispect to the current element
    
#### <a name="toPrev"></a>toPrev(): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.toPrev();
    
Move the internal pointer to the previous element with rispect to the current element

#### <a name="toEnd"></a>toEnd(): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.toEnd();
    
Move the internal pointer to the end of the list
    
#### <a name="get"></a>get(): T

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.get();
    
Return the current element    
    
#### <a name="isStart"></a>isStart(elem?: T): boolean

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var listElem:ElemenType = ll.toNext().get();
    ll.isStart(listElem);
    
Check if the passed element is the head of the list
    
#### <a name="isEnd"></a>isEnd(elem?: T): boolean

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var listElem:ElemenType = ll.toNext().get();
    ll.isStart(listElem);
    
Check if the passed element is the end of the list
    
#### <a name="clone"></a>clone(return_cloned?: boolean): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    ll.clone();
    //
    // or
    //
    var ll_cloned:LinkedList<ElementType> = ll.clone(true);
    
Clones the list, by default the reference of the cloned list will be stored in the `cloned_list`, if true value will be passed the refence will return directly
    
#### <a name="concat"></a>concat(list_to_append: LinkedList\<T\>): LinkedList\<T\>

    var ll1:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll1.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var ll2:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll2.init(ElementType, ['data4', 'data5', 'data6']);
    //    
    ll1.concat(ll2);
    
Concatenate two lists
    
#### <a name="rMerge"></a>rMerge(list_to_merge: LinkedList\<T\>, func?: Function): LinkedList\<T\>

    var ll1:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll1.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var ll2:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll2.init(ElementType, ['data4', 'data5', 'data6']);
    //    
    ll1.rMerge(ll2);
    
Merge recursively two lists, a sorting func can be passed    

#### <a name="merge"></a>merge(list_to_merge: LinkedList\<T\>, func?: Function): LinkedList\<T\>

    var ll1:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll1.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var ll2:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll2.init(ElementType, ['data4', 'data5', 'data6']);
    //    
    ll1.merge(ll2);
    
Merge two lists, a sorting func can be passed  `// TODO`
    
#### <a name="toArray"></a>toArray(): Array\<any\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, ['data1', 'data2', 'data3']);
    var arr_to_list:Array\<any\> = ll.toArray();
    
Return an array with value from the list's elements    
    
#### <a name="rSort"></a>rSort(sort_func?: Function, list?: LinkedList\<T\>): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, [7, 5, 3, 9, 12, 0]);
    ll.rSort();
    
Sort recursively the list, a sorting function an the list to sort can be passed    
        
#### <a name="sort"></a>sort(sort_func?: Function, list?: LinkedList\<T\>): LinkedList\<T\>

    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, [7, 5, 3, 9, 12, 0]);
    ll.rSort();
    
Sort the list, a sorting function an the list to sort can be passed `// TODO

#### <a name="isEqual"></a>isEqual(list: LinkedList\<T\>, equality_func?: (a: T, b: T) => boolean): boolean

    var ll1:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll1.init(ElementType, ['data1', 'data2', 'data3']);
    //
    var ll2:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll2.init(ElementType, ['data1', 'data5', 'data3']);
    //    
    ll1.isEqual(ll2);
    
Check if the list is equal to another, compare function can be passed
    
#### <a name="destroy"></a>destroy(): void
    
    var ll:LinkedList<ElementType> = new LinkedList<ElementType>();
    ll.init(ElementType, [7, 5, 3, 9, 12, 0]);
    ll.destroy();
    
Destroy the list

---
_Source: https://npm.io/package/lucabro-linked-list · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
