ts-ds-tool
Version:
Data structure and algorithm of TypeScript
234 lines (196 loc) • 5.29 kB
Markdown
//upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg)
```text
append(value)
向链表中追加一个节点,参数为要追加的节点的值,返回链表的头结点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
描述:
1——>2——>null
```
```text
prepend(value)
向链表头部之前添加一个节点,该节点会成为新的头结点,参数为要添加的节点的值,返回链表的头结点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.prepend(0);
描述:
0——>1——>2——>null
```
```text
pop()
推出尾节点,返回推出的节点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.prepend(0);
linklist.pop();
描述:
0——>1——>null
```
```text
shift()
推出头节点,返回推出的节点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.append(3);
linklist.shift();
描述:
2——>3——>null
```
```text
clear()
清空链表
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.clear();
描述:
null
```
```text
findNode(arg|value)
查找链表中的节点,参数为节点的值或者查询条件函数,返回查找的节点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.findNode(value=>value===1);
描述:
1——>2——>null
```
```text
deleteNode(arg|value)
删除链表中的节点,参数为节点的值或者查询条件函数,返回删除的节点
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.deleteNode(1);
linklist.deleteNode(value=>value===2);
描述:
2——>null
```
```text
insertAfter(value,node)
在某个节点后插入一个新节点,第一个参数为要插入的新节点的值,第二个参数为要在其后插入新节点的节点,返回true或false
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let node = linklist.findNode(1);
linklist.insertAfter(3,node);
描述:
1——>3——>2——>null
```
```text
getHeadNode()
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let headNode = linklist.getHeadNode();
描述:
1——>2——>null
```
```text
getTailNode()
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let headNode = linklist.getTailNode();
描述:
1——>2——>null
```
```text
toString()
将链表转为字符串
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let str = linklist.toString(); // 1,2
描述:
1——>2——>null
```
```text
toDoubleLinkList()
将单向链表转换为双向链表
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let doublelinklist = linklist.toDoubleLinkList();
描述:
1<——>2——>null
```
```text
toCycleLinkList()
将单向链表转换为双向链表
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let cyclelinklist = linklist.toCycleLinkList();
```
```text
toArray()
将链表转为数组
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
let array = linklist.toArray(); // [1,2]
描述:
1——>2——>null
```
```text
fromArray(array)
该方法为静态方法,可以将数组装换为单向链表,参数为待转换的数组,返回值为转换后的单向链表
示例:
LinkList.fromArray([1,2,3,4,5]);
描述:
1——>2——>3——>4——>5——>null
```
```text
Size
该属性用去获取链表的长度
示例:
let linklist = new LinkList();
linklist.append(1);
linklist.append(2);
linklist.append(3);
let size = linklist.Size; // 3
描述:
1——>2——>3——>null
```
在计算机科学中, 一个 **链表** 是数据元素的线性集合, 元素的线性顺序不是由它们在内存中的物理位置给出的。 相反, 每个元素指向下一个元素。它是由一组节点组成的数据结构,这些节点一起,表示序列。
在最简单的形式下,每个节点由数据和到序列中下一个节点的引用(换句话说,链接)组成。这种结构允许在迭代期间有效地从序列中的任何位置插入或删除元素。
更复杂的变体添加额外的链接,允许有效地插入或删除任意元素引用。链表的一个缺点是访问时间是线性的(而且难以管道化)。
更快的访问,如随机访问,是不可行的。与链表相比,数组具有更好的缓存位置。
![Linked List](https: