//两条链表若长度不一样,则计算出两条链表的长度,然后取绝对值(a.size()-b.size())
//然后将这个绝对值加1,因为使用了dummy
//对较长的链表进行指针移动
//移动后.即有两个指针指向两条链表到交点节点一样的距离
//然后进行两个指针的移动
//若两个指针的后一个地址相等
//则返回这个地址
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
auto *dummyOne = new ListNode(-1);
auto *dummyTwo = new ListNode(-1);
if (headA == nullptr || headB == nullptr)
return nullptr;
dummyOne->next = headA;
dummyTwo->next = headB;
auto *l = dummyOne, *r = dummyTwo;
int countA = 0, countB = 0;
while (l->next)
l = l->next, countA++;
while (r->next)
r = r->next, countB++;
int count = abs(countA - countB);
if (count)
if (countA > countB) {
count++;
l = dummyOne;
r = dummyTwo->next;
while (count--)
l = l->next;
} else {
count++;
l = dummyOne->next;
r = dummyTwo;
while (count--)
r = r->next;
}
else
l = dummyOne, r = dummyTwo;
if(l==r)
return l;
while (l->next && r->next) {
l = l->next;
r = r->next;
if (l == r)
return l;
}
return nullptr;
}
160. 相交链表
最新推荐文章于 2024-05-02 17:55:52 发布