题目
题目链接
题目描述
代码实现
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(pHead1 == nullptr || pHead2 == nullptr)
return nullptr;
ListNode* p1 = pHead1;
ListNode* p2 = pHead2;
while(p1 != p2){
p1 = p1==nullptr ? pHead2 : p1->next;
p2 = p2==nullptr ? pHead1 : p2->next;
}
return p1;
}
};
思路分析
1、设定两个节点分别指向每个链表的头节点,两个节点同速向后移动
2、当其中一个链表走到尾的时候,就链上另外一个节点的头节点,继续同速移动。
ps:步骤2是因为这两条链表的公共节点的后半部分是一样的,不同的是之前的部分,而当其中一个节点移动至末尾就链上另外链表的头节点,就是使两个节点的移动的步数一致。此后,就能同时到达公共节点。