问题
思路
朴素的思路不说了。
这个题有个默认的条件是:他们的公共节点之后一直是公共的,Y型的。
代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
typedef ListNode* ptr_t;
int len1 = get_len(pHead1);
int len2 = get_len(pHead2);
int offset = 0;
ptr_t p = NULL;
ptr_t q = NULL;
if( len1 > len2 ){
offset = len1 - len2;
p = pHead1;
q = pHead2;
}
else{
offset = len2 - len1;
p = pHead2;
q = pHead1;
}
while( offset-- ) p = p->next;
while(p && q && p != q){
p = p->next;
q = q->next;
}
return p;
}
private:
int get_len(ListNode* p){
int len = 0;
while(p){
++len;
p = p->next;
}
return len;
}
};