劍指offer 52. 兩個連結串列的第一個公共節點(彼此走對方走過的路,就能一起到達終點!)
阿新 • • 發佈:2021-02-03
技術標籤:研究生生活——演算法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/