题目描述
给你两个单链表的头节点 headA
和 headB
,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null
。题目数据 保证 整个链式结构中不存在环。
思路
一种普遍的思路是先遍历两个链表,分别求出其长度,再维护两个指针,让表长较长的那个指针先走两长之差的长度,表长较短的那个指针从头开始,然后两指针同时前进,直至相遇或者遍历结束。照这个思路实现起来也并不困难。但这是面试题,普通解法肯定不是面试官想要的,我们能不求出表长判断是否相交吗?其实是可以的。关键思路是让两表等长。怎么做到呢?设表长分别为m和n,m!n,我们维护两个指针指向两条链表,当其中一个链表遍历结束,我们让该指针指向另一链表,继续进行遍历,另一指针也是相同操作,最后两指针必然会相等(相遇或者同时为空)。用数学表达出来就是m+n==n+m。
解法
C++版本
Java版本
Python3版本