这个题目也是链表中的经典题型。方法应该都知道,就是先判断他们各自的长度,让后让长度长一点的先往后走他们的差值,然后两个链表同时往后走,当某一个节点相等的时候,就是他们的公共节点。
但是在写的时候还是学到了很多,比如一些特殊情况的处理,如果长度相等,又分为没有公共节点或者第一个就是公共节点或者在中间某一个节点是公共节点,有时候边界值真的很能体现一个人能力,这真的是自己欠缺的地方。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA== nullptr||headB== nullptr)return nullptr;
int numA=0,numB=0;
ListNode* p1=headA;
ListNode* p2=headB;
ListNode* res=nullptr;
while(p1){
numA++;
p1=p1->next;
}
while(p2){
numB++;
p2=p2->next;
}
if(numB==numA&&headA==headB)
{
return headA;
}
int num=0;
if(numA>=numB){
num=numA-numB;
while(num--)
{
headA=headA->next;
}
}
if(numB>numA){
num=numB-numA;
while(num--)
{
headB=headB->next;
}
}
while(headA&&headB)
{
if(headA==headB){
res=headB;
break;
}
headB=headB->next;
headA=headA->next;
}
return res;
}
};