问题:判断两个链表是否相交
(1)两链表均不带环
(2)两链表有一带环
(3)两链表均带环
-------------------------------
5.26添加:
1.,两链表均不带环,若两链表相交,则必有相同的元素,且相交后的所有元素都相同,因此可以直接判断两链表的最后一个元素是否相等,若相等就相交(此方法应该效率最高)。若要求两链表相交处的元素,此方法的时间复杂组度为O(M+N).
5.28添加:
若求两链表相交的第一个元素,如果确定两链表相交,设M>N,m,n为两链表的元素个数,则先将元素个数为M的链表向右移动M-N个元素,然后同时遍历两链表,如果M[I] = N[i],则i为第一个相交的元素。
5.30添加
(2)两链表有一带环
求是否相交,确定哪个是环链表,之后遍历至非环链表最后一个元素,查找环链表中是否有此元素。
求第一个相交的元素,将环链表从与第一个链表最后一节点相等的地方截开,之后按照 两个链表均不带环 的方法来处理。
(3)两链表均带环
两链表均带环情况下,如果相交,则链表的环路节点都相等,即两链表的环路节点相同且个数相同。将较长的链表前面M-N个元素截掉,之后两链表同步遍历,遍历N个后停止,若之间出现相同的节点,则相交且为第一个相交的节点。
若不知道两链表长度,则先找两链表中的环路,任选一在另外一个环路链表查找,找到即为相交。此种方法没有考虑效率。