题目描述
输入两个链表,找出它们的第一个公共结点。
解题思路
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
// 遍历链表得到其长度
unsigned int GetLen(ListNode* pHead){
unsigned int len=0;
ListNode* pC1 = pHead;
while(pC1!=NULL){
len++;
pC1=pC1->next;
}
return len;
}
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int len1=GetLen(pHead1);
int len2=GetLen(pHead2);
int diflen=len1-len2;
// 定义长链表和短链表
ListNode* plong = pHead1;
ListNode* pshort = pHead2;
if(len2>len1){
diflen=len2-len1;
plong = pHead2;
pshort = pHead1;
}
// 长链表先走其长度差值步
int cnt=0;
while(cnt<(len1-len2)){
plong=plong->next;
cnt++;
}
// 一起走,知道遇到公共节点并返回
while(plong!=NULL && pshort!=NULL){
if(plong==pshort) return plong;
plong=plong->next;
pshort=pshort->next;
}
}
};