定义
快慢指针指两个同向移动的指针,分别以不同的步长移动。主要涉及在[[链表]]中的使用。
应用
1. 判断链表是否包含闭环
两个快慢指针,快指针一次比满指针多走一个节点。当快指针追上慢指针的时候,则证明链表是闭环的。反之快指针会指向null。
代码实现
fast = slow = head
fast = fast->next->next
slow = fast->next
while(true) {
if (fast == null || fast->next == null) {
return false
}
if (fast == slow || fast->next == slow) {
return true
}
fast = fast->next->next
slow = slow->next
}
2. 寻找链表的中间节点
快指针是慢指针速度的二倍,满指针移动一个节点,快指针移动两个节点。当快指针移动到终点的时候慢指针正好在链表的中间位置。
3. 删除倒数第几个节点
快指针设置成比慢指针快需要删除的节点数量,当快指针知道终点的时候,慢指针正好在想要的位置。