1,题目要求
输入两个链表,找出它们的第一个公共结点。
2,题目思路
对于这道题, 要求找到两个链表的公共节点。
这道题算是一道非常经典的问题了,主要在于让链表长的先走,同一两个链表剩下的长度,然后,按部就班就行比较即可。
3,代码实现
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(!pHead1 || !pHead2)
return nullptr;
int len1 = ListLen(pHead1);
int len2 = ListLen(pHead2);
int n = len1 - len2;
if(n>=0){
while(n--)
pHead1 = pHead1->next;
}
else{
while(n++)
pHead2 = pHead2->next;
}
while(pHead1 && pHead2){
if(pHead1 == pHead2)
return pHead1;
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return nullptr;
}
private:
int ListLen(ListNode* head){
int len = 0;
while(head){
len++;
head = head->next;
}
return len;
}
};