判断两链表是否交叉主要有如下三种方法:遍历
一、 最简单的方法就是先顺序访问其中一个链表,在每访问一个节点时,都对另一个链表进行遍历,看节点是否相等,直到找到一个相等的节点位置,方法
若是链表长度分别是m,n 则时间复杂度为O(mn)链表
二、咱们能够知道若是两个链表有公共节点,那么该公共节点以后的全部节点都是两个链表所共有的,因此长度必定也是相等的,若是两个链表的总长度是相等的,那么咱们对两个链表进行遍历,则必定同时到达第一个公共节点。可是链表的长度实际上不必定相同,因此咱们只须要计算出两个链表的长度之差n,而后让长的那个链表先移动n步,短的链表再开始向后遍历,这样他们必定同时到达第一个公共节点,咱们只须要在向后移动的时候比较两个链表的节点是否相等就能够得到第一个公共节点。时间复杂度是O(m+n)移动
三、咱们能够将其中一个链表的首尾相连,而后判断另外一个链表是否含环。若是含环,则两链表交叉;不然,不交叉。时间复杂度是O(max[m,n])时间