面试题52:两个链表的第一个公共节点
题目描述
输入两个链表,找出它们的第一个公共结点。
代码:
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(pHead1==nullptr||pHead2==nullptr){
return nullptr;
}
ListNode* pNode1=pHead1;
ListNode* pNode2=pHead2;
int len1=0;
int len2=0;
while(pNode1){
len1++;
pNode1=pNode1->next;
}
while(pNode2){
len2++;
pNode2=pNode2->next;
}
ListNode* pLong=pHead1;
ListNode* pShort=pHead2;
int diff=len1-len2;
if(len2>len1){
pLong=pHead2;
pShort=pHead1;
diff=len2-len1;
}
for(int i=0;i<diff;i++){
pLong=pLong->next;
}
while(pLong!=pShort){
pLong=pLong->next;
pShort=pShort->next;
}
return pLong;
}
};
注意点:
求链表长度
int len1=0;
while(pNode1){
len1++;
pNode1=pNode1->next;
}