快慢指针

267 阅读1分钟

快慢指针的主要用处:

1.找到链表的中间节点 Screenshot_20220324_131553_com.newskyer.draw.jpg 如果想将链表平分为两半,则可以在链表头部加一个虚拟头节点,再用快慢指针,慢指针最后刚好指向前半链表的最后一个节点。储存慢指针的下一个节点作为后半链表的头指针,再将慢指针的下一个节点置为null。 例:#### 剑指 Offer II 077. 链表排序

2. 判断链表中的环

示意图:

image.png

推理过程:

image.png

判断链表中是否有环: 如果快慢指针能相遇,那么说明链表中有环。

141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com)

判断链表中是否有环,若有,则返回环的入口的结点:快慢指针二次相遇的结点。

142. 环形链表 II - 力扣(LeetCode) (leetcode-cn.com)

287. 寻找重复数 - 力扣(LeetCode) (数组版循环链表:将数组看做链表,将下标n到数nums[n]看做一个映射,该映射相当于链表的next指针的作用)

3.删除链表的倒数第n个节点