# 单向链表
规范
- 每个节点有下一个节点的指针
- 可以拿到链表的长度
- 增
- 末尾添加元素:append(ele)
- 指定下标插入元素:appendAt(index, ele)
- 删
- 末尾元素移除
- 指定下标移除:delete(index)
- 改
- updataAt(index, newEle)
- 查
- get(index)
- indexOf(element)
期望
实现
const ll = new LinkList(); ll.append('father') .append('me') .append('son') ll.appendAt(1, 'mother'); console.log(ll.get(3)); // son console.log(ll.indexOf('son')); // 3 ll.delete(0); console.log(ll.indexOf('me')); // 1 ll.updateAt(0, 'daughter'); console.log(ll.indexOf('daughter')); // 0
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 双向链表
规范
- Node节点有头指针和尾指针
- 记录长度
- 尾部插入不用遍历,更方便
- 通过下标取节点效率更高【判断index是否过半,从前往后和从后往前】
- 反向遍历更方便
期望
实现
const dbll = new DBLinkList(); dbll.append('张三') .append('李四') .append('王五') console.log(dbll.get(2)); // 王五
复制成功
1
2
3
4
5
6
2
3
4
5
6
# 206.反转链表
双指针法
时间:88.33%
空间:37.73%
var reverseList = function(head) { let prev = null; while (head) { let next = head.next; head.next = prev; prev = head; head = next; } return prev; };
复制成功
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 82. 删除排序链表中的重复元素 II
题
解
- 有序链表,删除所有重复的元素(只留不重复的)
const head = [1,2,3,3,4,4,5] console.log(deleteDuplicates(head)); // 输出:[1,2,5]
复制成功
1
2
3
2
3
# 02.08. 双指针判断环及入口
题
解
- 给定链表,判定环,无则返回null
- 有则返回环入口节点
# 92. 反转链表 II
题
解
- 指定起始反转和终止反转的坐标,反转这一个区域的链表段
const head = [1,2,3,4,5], left = 2, right = 4 console.log(reverseBetween(head, left, right)); // 输出:[1,4,3,2,5]
复制成功
1
2
3
2
3
v1.4.16