一、什么叫链表
- 多个元素存储的列表
- 链表中的元素在内存中不是顺序存储的,而是通过”next”指针联系在一起的。
js中的原型链 原理就是 链表结构
二、链表和数组的区别
数组:有序存储的,在中间某个位置删除或者添加某个元素,其他元素要跟着动。
- arr[0],arr[1] 数组随机访问的时间复杂度是O(1)
- [1,2,3,4]在2后加上一个6,那么3,4先往后移动一个位置,然后再加上6。数组新增(删除)元素的时间复杂度是O(n),数组新增元素,插入和删除元素性能都比较差
链表:不是顺序存储的,而是通过”next”指针联系在一起的。
- 随机访问的时间复杂度O(n),因为是一个一个找
- 删除和插入的时间复杂度O(1),1 x 断了2 x 断了3===》1=>3=>4
// 1=>2=>3=>4 链表(单项链表){a:1,next:{b:2,next:{c:3,next:null}}}
讲数据结构的时候,通常都是讲它的增删改查,如链表的增删改查
时间复杂度、空间复杂度,现在更关注时间复杂度,因为存储很便宜,时间很值钱
- 链表的类型
单项链表
双向链表
环形链表
…

- 数组,链表数据结构分别什么时候使用:
javascript中没有链表,可以用js写一个
随机访问用数组、删除插入用链表
- 查找最后一个值:数组遍历可以直接用length、for循环直接查最后一个。而链表的查找最后一个只能用while、do…while…
三、链表的增删改查
// 链表let a = {key:'aaa'};let b = {key:'bbb'};let c = {key:'ccc'};let d = {key:'ddd'};a.next = b;b.next = c;c.next = d;d.next = null;console.log( a );
- 遍历链表 ```javascript let obj = a; // a为头节点
while( obj && obj.key ){ console.log( obj.key ); obj = obj.next; // 遍历的条件 }
2. 链表中插入节点```javascriptlet m = {key:'mmmmm'};c.next = m;m.next = d;console.log( a );
删除链表某个节点
直接改变next指针指向
// 删除上面新增的m节点c.next = d;
