1 | # 单向循环链表
|
2 |
|
3 | 循环单链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。
|
4 |
|
5 | ## 基本操作的API及示例
|
6 |
|
7 | ### 追加
|
8 |
|
9 | ```text
|
10 | append(value)
|
11 | 向链表中追加一个节点,参数为要追加的节点的值,返回链表的头结点
|
12 | 示例:
|
13 | let linklist = new CycleLinkList();
|
14 | linklist.append(1);
|
15 | linklist.append(2);
|
16 | ```
|
17 |
|
18 | ### 向前追加
|
19 |
|
20 | ```text
|
21 | prepend(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
|
33 | pop()
|
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
|
46 | shift
|
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
|
59 | clear
|
60 | 清空链表
|
61 | 示例:
|
62 | let linklist = new CycleLinkList();
|
63 | linklist.append(1);
|
64 | linklist.append(2);
|
65 | linklist.clear();
|
66 | ```
|
67 |
|
68 | ### 查找节点
|
69 |
|
70 | ```text
|
71 | findNode(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
|
83 | deleteNode(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
|
97 | insertAfter(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
|
110 | getHeadNode()
|
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
|
121 | getTailNode()
|
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
|
132 | toString()
|
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
|
142 | toArray
|
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
|
154 | fromArray
|
155 | 该方法为静态方法,可以将数组装换为单向链表,参数为待转换的数组,返回值为转换后的单向链表
|
156 | 示例:
|
157 | CycleLinkList.fromArray([1,2,3,4,5]);
|
158 | ```
|
159 |
|
160 | ### 链表长度
|
161 |
|
162 | ```text
|
163 | Size
|
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
|
176 | getEnumerator
|
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 |