1. 程式人生 > 其它 >劍指offer 52. 兩個連結串列的第一個公共節點(彼此走對方走過的路,就能一起到達終點!)

劍指offer 52. 兩個連結串列的第一個公共節點(彼此走對方走過的路,就能一起到達終點!)

技術標籤:研究生生活——演算法leetcode連結串列c++

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/