代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
int MyAbs(int x,int y)
{
int z = x - y;
if(z < 0)
{
return -z;
}
return z;
}
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
ListNode* l1 = headA;
ListNode* l2 = headB;
int sizeA = 0,sizeB = 0;
//求两个链表的长度
while(l1)
{
sizeA++;
l1 = l1->next;
}
while(l2)
{
sizeB++;
l2 = l2->next;
}
//差值
int gap = MyAbs(sizeA,sizeB);
//判断哪个链表长,哪个链表短
ListNode* longList = headA;
ListNode* shortList = headB;
if(sizeB > sizeA)
{
longList = headB;
shortList = headA;
}
//让长链表走差值补
while(gap--)
{
longList = longList -> next;
}
while(longList != shortList)//这里判断的是节点的地址,而不是节点的val值
{
if(!longList || !shortList)
{
//链表不相交
return NULL;
}
longList = longList->next;
shortList = shortList->next;
}
return longList;
}
提交结果: