暴力解法
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1==NULL||pHead2==NULL) return NULL; struct ListNode * p1=pHead1; struct ListNode * p2=pHead2; while(p1!=NULL) { p2=pHead2;//重置p2,使p2重新指向表头,开始下一次的遍历。 while(p2!=NULL) { if(p2==p1) { return p1; } p2=p2->next; } p1=p1->next; } return NULL; } };
巧妙解法
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { struct ListNode * p1 = pHead1; struct ListNode * p2 = pHead2; while(p1!=p2) { p1 = (p1==NULL)?pHead2:p1->next; p2 = (p2==NULL)?pHead1:p2->next; } return p1; } };