算法小技巧
# 1. 快慢指针
- 上述是快慢指针的手绘示意图。 下列来分析下快慢指针的使用场景:
- 顾名思义,快慢指针只是两个指针变量,同时开始遍历,一个执行快,一个执行慢
- 这种技巧适合于查找中间数据。而且这个接口是类似链表的线性结构。是不可能通过索引,或是直接获取某个位置节点的
- 想要获取中间节点,有两种情况,看下面代码:
// 用数组模拟链表
const step1 = [1, 2, 2, 1]
const step2 = [1, 2, 3, 2, 1]
1
2
3
2
3
- 一般分为两种情况(偶数节点/ 奇数节点)来获取中间节点
- 如果是奇数节点的话,不用废话肯定是中间那个节点
- 但是如果是偶数节点的话,就是偏右的节点就是中间节点了。 可以理解为
Math.ceil(len / 2)
- 如果一般是链表获取中间节点的话,可以使用下列代码:
let fast = head,
slow = head
while (fast && fast.next) {
fast = fast.next.next
slow = slow.next
}
1
2
3
4
5
6
2
3
4
5
6