考点
求两个链表相交结点的指针*
交点不是数值相等,而是指针相等
思路
看如下两个链表,目前curA指向链表A的头结点,curB指向链表B的头结点:
我们求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,如图:
此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。否则循环退出返回空指针。
代码
struct ListNode
{
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
#include<math.h>
class Solution
{
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB)
{
int headA_length = getLinkedListLength(headA);
int headB_length = getLinkedListLength(headB);
int length_difference = abs(headA_length-headB_length);
if(length_difference != 0)
{
while(length_difference--)
{
if(headA_length > headB_length)
headA = headA->next;
else
headB = headB->next;
}
}
while(headA != nullptr)
{
if(headA == headB)
return headA;
else
{
headA = headA->next;
headB = headB->next;
}
}
return headA;
}
int getLinkedListLength(ListNode *head)
{
int length = 0;
while(head != nullptr)
{
length++;
head = head->next;
}
return length;
}
};