快慢指针的主要用处:
1.找到链表的中间节点
如果想将链表平分为两半,则可以在链表头部加一个虚拟头节点,再用快慢指针,慢指针最后刚好指向前半链表的最后一个节点。储存慢指针的下一个节点作为后半链表的头指针,再将慢指针的下一个节点置为null。
例:#### 剑指 Offer II 077. 链表排序
2. 判断链表中的环
示意图:
推理过程:
判断链表中是否有环: 如果快慢指针能相遇,那么说明链表中有环。
141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com)
判断链表中是否有环,若有,则返回环的入口的结点:快慢指针二次相遇的结点。
142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)
287. 寻找重复数 - 力扣(LeetCode) (数组版循环链表:将数组看做链表,将下标n到数nums[n]看做一个映射,该映射相当于链表的next指针的作用)
3.删除链表的倒数第n个节点