假设链 a 和链 b 重合的长度为 len_c,链 a 非重合长度为 len_a,链 b 非重合长度为 len_b,所以从链 a 出发的指针走完的路程长度为 len_a + len_c + len_b,而链 b 出发的指针走完的路程长度为 len_b + len_c + len_a。【因而最后必然会相遇】
假设双链表没有重合部分,即 len_c = 0,且假设 len_a != len_b,则链 a 出发的指针走完的路程长度为 len_a + len_b,而链 b 出发的指针走完的路程长度为 len_b + len_a。【即最后同时为空指针则相遇,无论双链表长度是否相等,只要无重合,均会相遇于空指针处】
代码实现:
classSolution{public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB){
ListNode* a = headA;
ListNode* b = headB;while(a != b){
a = a ? a->next : headB;
b = b ? b->next : headA;}return a;}};