首先,想象两条无限长的链A,B。 p1指向A, p2指向B, p1每次+1, p2每次+2
A: p1-> (1) -- (2) -- (3) -- (4) -- (5) --...
B: p2-> (1) -- (2) -- (3) -- (4) -- (5) --...
因为p2总比p1前进快2倍,所以无论p1在那里,总会有一个时刻,p2 接近p1,
case 1:p1在(2), p2也到达(2), 相遇;
case 2: p1在(2),p2在(1)。p1+1到达(3), p2+2到达(3)。
所以p2总会与p1相遇。
现在回到这个题目上,一共有三种情况:
1、link1 何link2不相交:p1,p2走到头;p3,p4走到头,结束O(max(m,n))。 m、n分别是link1, link2的长度;
2、link1何link2相交,但无环:p2和p4将在链尾相遇,O(max(m,n)/2) (需要p2与p4作比较)
3、link1何link2相交,且有环:(假设link1无环部分长度s,link2无环部分长度t, 环长r), p1,p2,p3,p4最多经过max(s,t)步进入环,经过最多r/2步,p2先追上p3或者p4先追上p1。O(max(s, t) + r/2)(更正了一下)
所以最坏情况时O(max(m,n)) = O(n)
* 乘以4是因为每步作4次比较。
A: p1-> (1) -- (2) -- (3) -- (4) -- (5) --...
B: p2-> (1) -- (2) -- (3) -- (4) -- (5) --...
因为p2总比p1前进快2倍,所以无论p1在那里,总会有一个时刻,p2 接近p1,
case 1:p1在(2), p2也到达(2), 相遇;
case 2: p1在(2),p2在(1)。p1+1到达(3), p2+2到达(3)。
所以p2总会与p1相遇。
现在回到这个题目上,一共有三种情况:
1、link1 何link2不相交:p1,p2走到头;p3,p4走到头,结束O(max(m,n))。 m、n分别是link1, link2的长度;
2、link1何link2相交,但无环:p2和p4将在链尾相遇,O(max(m,n)/2) (需要p2与p4作比较)
3、link1何link2相交,且有环:(假设link1无环部分长度s,link2无环部分长度t, 环长r), p1,p2,p3,p4最多经过max(s,t)步进入环,经过最多r/2步,p2先追上p3或者p4先追上p1。O(max(s, t) + r/2)(更正了一下)
所以最坏情况时O(max(m,n)) = O(n)
* 乘以4是因为每步作4次比较。