2个单向链表在某个地方相交,问如何求出第一个相交点
如果两个链表相交,则从相交点开始,后面的节点都相同,即最后一个节点肯定相同;
从头到尾遍历两个链表,并记录链表长度,当二者的尾节点不同,则二者肯定不相交;
尾节点相同,如果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?