/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
#include <cstdlib>
class Solution {
public:
int getsize(ListNode* k) { //获取链表大小
int count = 0;
while (k) {
count++;
k = k->next;
}
return count;
}
int abc (int a, int b) { //绝对值函数
if (a - b >= 0) {
return a - b;
}else{
return -(a - b);
}
}
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if (!pHead1 || !pHead2){
return nullptr;
}
int count1 = getsize(pHead1);
int count2 = getsize(pHead2);
cout << abc(count1, count2) << endl;
for (int i = 0; i < abc(count1, count2); i++) {
//哪个链表长,就移动哪个链表,直到两个链表一样长
if (count1 >= count2) {
pHead1 = pHead1->next;
}else{
pHead2 = pHead2->next;
}
}
while (pHead1 && pHead2) { //遍历两个链表,当出现相同的值,直接返回这个节点以及后边的节点
if (pHead1->val == pHead2->val) {
return pHead1;
}
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return nullptr;
}
};