2个单向链表在某个地方相交,问如何求出第一个相交点

  1. 如果两个链表相交,则从相交点开始,后面的节点都相同,即最后一个节点肯定相同;

  2. 从头到尾遍历两个链表,并记录链表长度,当二者的尾节点不同,则二者肯定不相交;

  3. 尾节点相同,如果A长为LA,B为LB,如果LA>LB,则A前LA-LB个先跳过,

然后二者一起向后遍历,直到遇到相同的节点;LA<LB类似处理 因为第一个公共节点距起始节点的距离start_a满足: LA - start_a == LB - start_b。

答案2:

从以下几个步骤分析:

判断一个单链表是否存在环路,如果无环,返回null,反之,返回入环节点。

如果两个单链表均无环,进入相应的子程序,如果无相交,返回null,反之,返回第一个相交节点。

如果一个有环,一个无环,进入相应的子程序,如果无相交,返回null,反之,返回第一个相交节点。

如果两个单链表均有环,进入相应的子程序,如果无相交,返回null,反之,返回第一个相交节点。

Last updated

Was this helpful?