快慢指针发散

2019-12-15  本文已影响0人  XJ2017

背景:昨晚跟前同事们宵夜被问道判断单向链表有无环的算法,第一次接触到快慢指针,觉得有意思!
旧思路:通过内存缓存路线,比对路线判断是否有环。

新思路:通过设定两个角色(快慢指针)分别以单节点与2倍(注意:任何大于或等于2倍数都行)单节点速度依次遍历,当出现两角色同时访问一个节点则表示存在环。

发散问题:怎么找到形成环的节点?

假设:第一个相遇步骤数N,第二次相遇步骤数M

  1. 计算环的大小
    M-N
  2. 计算指定范围查找形成环的节点
    从 N-(M-N)= 2N - M 开始查找
  3. 利用快慢指针查找环节点
    快慢指针都从 2N - M 开始,保持间距 M-N,按顺序遍历节点。当快慢节点第一次相同时则为形成换的节点
上一篇 下一篇

猜你喜欢

热点阅读