剑指offer 52. 两个链表的第一个公共节点(彼此走对方走过的路,就能一起到达终点!)

2021年02月02日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】


解题思路:

侧面分析:从整体上把握,自己的路走完之后,就去走对方的路,当第二次走到终点的时候,两个人就都走了M+N步,倒推回去,则两个人第一次相遇的点即为所求。

直接分析:当第二个人到达终点时,第一个人刚好走完了两者之差,所以后面再一起走的话,就会在第一个公共点处相遇了。

class Solution {
    
    
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
    
    
        if(headA==nullptr || headB==nullptr) return nullptr;
        ListNode *hA = headA, *hB = headB;
        while(hA!=hB){
    
    
            hA = hA?hA->next:headB;
            hB = hB?hB->next:headA;
        }
        return hA;
    }
};

参考文献

《剑指offer 第二版》

https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/shuang-zhi-zhen-fa-lang-man-xiang-yu-by-ml-zimingm/

猜你喜欢

转载自blog.csdn.net/m0_37433111/article/details/113555948