输入两个链表,找出它们的第一个公共节点。
思路一:
先统计两个链表的长度,比如l1长度为10,l2长度为6。然后l1先走4步,l1和l2再同时出发,如果l1等于l2则找到公共节点。
代码:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA == nullptr || headB == nullptr) return nullptr;
int a = 0,b = 0;
ListNode* aTmp = headA;
ListNode* bTmp = headB;
while(aTmp) {
a++;
aTmp = aTmp->next;
}
while(bTmp) {
b++;
bTmp = bTmp->next;
}
aTmp = headA;
bTmp = headB;
if(a > b) {
while(a - b > 0) {
aTmp = aTmp->next;
a--;
}
}
else {
while(b - a > 0) {
bTmp = bTmp->next;
b--;
}
}
while(aTmp != bTmp) {
aTmp = aTmp->next;
bTmp = bTmp->next;
}
return aTmp != nullptr ? aTmp:nullptr;
}
};