剑指offer 036、两个链表的第一个公共结点
题目
题解
分两种情况:
- 长度相同时:
- 若两链表有公共结点,第一次就遍历到了
- 若无公共结点,两链表同时走到尾部nullptr,返回nullptr
- 长度不同时:
- 若有公共结点,第一遍差值会出来,第二遍就可以同时走到公共结点
- 若无公共结点,第二遍时两链表同时走到尾部nullptr
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if (!pHead1 || !pHead2) return nullptr;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while (p1 != p2) {
p1 = (p1 == nullptr ? pHead2 : p1 = p1->next);
p2 = (p2 == nullptr ? pHead1 : p2 = p2->next);
}
return p1;
}
};