求兩個鏈表的第一個公共節點(建模有趣)
阿新 • • 發佈:2018-11-14
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; } };
求兩個鏈表的第一個公共節點(建模有趣)