/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode* cur1 = pHead1;
ListNode* cur2 = pHead2;
// 双指针,当 cur1等于 cur2时返回公共的节点,退出循环。或者 cur1和 cur2同时为 nullptr即没有公共节点时退出 while循环
while(cur1 || cur2) {
if(cur1 == cur2) {
return cur1;
}
// cur1和 cur2同时遍历,注意当其中一个指针为空时跳转到另一个链表,而不是另一个链表上的指针(cur1或cur2)
cur1 = cur1==nullptr ? pHead2 : cur1->next;
cur2 = cur2==nullptr ? pHead1 : cur2->next;
}
// 如果cur1、cur2同时为空时即没有公共的节点返回 nullptr
return nullptr;
}
};