两个链表的第一个公共节点
题目描述
输入两个链表,找出它们的第一个公共结点。
解题思路
- 两个指针从链表头节点开始遍历,如果遍历到了所在链表的表尾,就切换到对方链表头,继续遍历
- 如果存在公共节点,则会因为
p1==p2
而跳出循环 - 如果不存在公共节点,也会因为
p1==p2(==NULL)
而跳出循环,因为两者走的长度都是连个链表的长度之和,所以会同时到达NULL
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *p1=pHead1,*p2=pHead2;
if(p1==NULL || p2==NULL) return NULL;
while(p1 != p2){
if(p1!=NULL) p1=p1->next;
else p1=pHead2;
if(p2!=NULL) p2=p2->next;
else p2=pHead1;
}
return p1;
}
};