UNPKG

4.07 kBMarkdownView Raw
1# 单向循环链表
2
3循环单链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
4
5## 基本操作的API及示例
6
7### 追加
8
9```text
10append(value)
11向链表中追加一个节点,参数为要追加的节点的值,返回链表的头结点
12示例:
13 let linklist = new CycleLinkList();
14 linklist.append(1);
15 linklist.append(2);
16```
17
18### 向前追加
19
20```text
21prepend(value)
22向链表头部之前添加一个节点,该节点会成为新的头结点,参数为要添加的节点的值,返回链表的头结点
23示例:
24 let linklist = new CycleLinkList();
25 linklist.append(1);
26 linklist.append(2);
27 linklist.prepend(0);
28```
29
30### 弹出尾节点
31
32```text
33pop()
34推出尾节点,返回推出的节点
35示例:
36 let linklist = new CycleLinkList();
37 linklist.append(1);
38 linklist.append(2);
39 linklist.prepend(0);
40 linklist.pop();
41```
42
43### 推出头结点
44
45```text
46shift
47推出头节点,返回推出的节点
48示例:
49 let linklist = new CycleLinkList();
50 linklist.append(1);
51 linklist.append(2);
52 linklist.append(3);
53 linklist.shift();
54```
55
56### 清空链表
57
58```text
59clear
60清空链表
61示例:
62 let linklist = new CycleLinkList();
63 linklist.append(1);
64 linklist.append(2);
65 linklist.clear();
66```
67
68### 查找节点
69
70```text
71findNode(arg|value)
72查找链表中的节点,参数为节点的值或者查询条件函数,返回查找的节点
73示例:
74 let linklist = new CycleLinkList();
75 linklist.append(1);
76 linklist.append(2);
77 linklist.findNode(value=>value===1);
78```
79
80### 删除节点
81
82```text
83deleteNode(arg|value)
84删除链表中的节点,参数为节点的值或者查询条件函数,返回删除的节点
85示例:
86 let linklist = new CycleLinkList();
87 linklist.append(1);
88 linklist.append(2);
89 linklist.append(3);
90 linklist.deleteNode(1);
91 linklist.deleteNode(value=>value===2);
92```
93
94### 向后插入
95
96```text
97insertAfter(value,node)
98在某个节点后插入一个新节点,第一个参数为要插入的新节点的值,第二个参数为要在其后插入新节点的节点,返回true或false
99示例:
100 let linklist = new CycleLinkList();
101 linklist.append(1);
102 linklist.append(2);
103 let node = linklist.findNode(1);
104 linklist.insertAfter(3,node);
105```
106
107### 获取头结点
108
109```text
110getHeadNode()
111示例:
112 let linklist = new CycleLinkList();
113 linklist.append(1);
114 linklist.append(2);
115 let headNode = linklist.getHeadNode();
116```
117
118### 获取尾结点
119
120```text
121getTailNode()
122示例:
123 let linklist = new CycleLinkList();
124 linklist.append(1);
125 linklist.append(2);
126 let headNode = linklist.getTailNode();
127```
128
129### 转换字符串
130
131```text
132toString()
133将链表转为字符串
134示例:
135 let linklist = new CycleLinkList();
136 linklist.append(1);
137 linklist.append(2);
138 let str = linklist.toString(); // 1,2
139```
140
141```text
142toArray
143将链表转为数组
144示例:
145 let linklist = new CycleLinkList();
146 linklist.append(1);
147 linklist.append(2);
148 let array = linklist.toArray(); // [1,2]
149```
150
151### 数组转链表
152
153```text
154fromArray
155该方法为静态方法,可以将数组装换为单向链表,参数为待转换的数组,返回值为转换后的单向链表
156示例:
157 CycleLinkList.fromArray([1,2,3,4,5]);
158```
159
160### 链表长度
161
162```text
163Size
164该属性用去获取链表的长度
165示例:
166 let linklist = new CycleLinkList();
167 linklist.append(1);
168 linklist.append(2);
169 linklist.append(3);
170 let size = linklist.Size; // 3
171```
172
173### 获取可迭代因子
174
175```text
176getEnumerator
177获取可迭代因子
178示例:
179 let linkList = new CycleLinkList();
180 linkList.append(1);
181 linkList.append(3);
182 const iterator = linkList.getEnumerator();
183 let index = 0,
184 value;
185 while(index < 10){
186 if(index === 9){
187 value = iterator.Current.value;
188 }
189 iterator.next();
190 index++;
191 }
192 console.log(value); // 3
193```
\No newline at end of file