/* 一、比较容易理解的方法 分别把两条链走完,计算两条链的长度,差值就是一条链比另外一条链的长的长度; 然后将将较长的链先走到剩下的和另一条一样长时,两条链开始同步一起走,相等处即为相交的起点,若走到空没有,则说明没有交点。 二、用哈希表存存储一条链 遍历另一条链,在哈希表中找到的第一个结点即为交点的开始,若哈希表中没有任何一个结点,则没有交点。 三、双向指针 因为两条链之和相等,所以当从起点开始,走完后到另外一条链的起点开始,那么当走到相同结点时,则为相交的起点。 */ // 这里是最佳方案 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { if(headA == NULL || headB == NULL) return NULL; struct ListNode *pa = headA; struct ListNode *pb = headB; while(pa != pb) { if(pa == NULL) pa = headB; if(pb == NULL) pb = headA; pa = pa->next; pb = pb->next; } return headA; }