1. 程式人生 > >求兩個鏈表的第一個公共節點(建模有趣)

求兩個鏈表的第一個公共節點(建模有趣)

pub clas ima 時間復雜度 ret img rst nod bsp

題目描述:

技術分享圖片

析:本題如果采用暴力遍歷方法的話,最大時間復雜度為O((m + n)* (l + n))

技術分享圖片

其實這道題可以建模成一個相遇問題,如上圖所示:A和B同時出發,速度均為1,求他們的相遇點p,很明顯,當行走路程達到(m + n + l)時,兩者路程相同,相遇,代碼如下:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public
: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* p1 = pHead1; ListNode* p2 = pHead2; while(p1 != p2) { p1 = (p1 == NULL ? pHead2 : p1 -> next); p2 = (p2 == NULL ? pHead1 : p2 -> next); }
return p1; } };

求兩個鏈表的第一個公共節點(建模有趣)