1. 简单链表相交
判断是否相交,只需看表尾是否一致。
寻找相交点,只需让长链表先遍历过长出来的部分,然后与短链表同步遍历,第一个相同结点便是相交点。
2. 带圈链表
方法1,判断是否带圈,只需逆转此链表,若逆转后表尾与原表头一致,则带圈。寻找圈入口,首先逆转操作时可知操作数C = 圈外长度x 2 + 圈长度,于是从表头出发,走C步则必到圈中某结点N,然后继续遍历再次到达N时,则得到圈长度,然后得到圈外长度,最终找到圈入口。如果要求不改变原链表,则再操作一遍逆转即可还原。
方法2,两指针,慢针一次一步,快针一次两步,相遇则有圈。相遇点为N,则从表头到N的距离为圈长度的倍数。于是,取两指针,一个从表头出发,另一从N出发,几圈后两指针必相遇在N,而第一个相遇结点,即为圈入口。虽无必要,但可以证明快慢针相遇时慢针没有走完一圈:慢针在入口时,快针必在圈内某一点,此后慢针走半圈时,快针走完一整圈,期间必与慢针相遇。