题目描述:
输入两个链表,找出它们的第一个公共结点
思路分析:
两个单向链表有公共结点,那么从某一结点开始,后面都指向同一结点。
1.先分别遍历一次得到两个链表长度
2.较长的链表先走l1-l2或者l2-l1步
3.再同时在两个链表遍历,相遇时即是公共结点
实现代码
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int l1=0,l2=0,l;
ListNode* p1=pHead1;
ListNode* p2=pHead2;
while(p1 != NULL){
l1+=1;
p1=p1->next;
}
while(p2 !=NULL){
l2+=1;
p2=p2->next;
}
if(l1>l2){
l=l1-l2;
p1=pHead1;
p2=pHead2;
}
else{
l=l2-l1;
p1=pHead2;
p2=pHead1;
}
for(int i=0;i<l;i++){
p1=p1->next;
}
while(p1 != NULL && p2 != NULL){
if(p1->val==p2->val){
return p1;
}
p1=p1->next;
p2=p2->next;
}
return NULL;
}