leetcode/src/s0160_intersection_of_two_l...

34 lines
817 B
C++

#include "s0160_intersection_of_two_linked_lists.hpp"
ListNode *S0160::getIntersectionNode(ListNode *headA, ListNode *headB) {
// 获取两个链表的长度
int lenA{0};
for (ListNode *ptr = headA; ptr != nullptr; ptr = ptr->next) {
++lenA;
}
int lenB{0};
for (ListNode *ptr = headB; ptr != nullptr; ptr = ptr->next) {
++lenB;
}
// 设置两个指针的起始位置
ListNode *ptrA = headA, *ptrB = headB;
if (lenA > lenB) {
for (int i{0}; i < lenA - lenB; ++i) {
ptrA = ptrA->next;
}
} else if (lenA < lenB) {
for (int i{0}; i < lenB - lenA; ++i) {
ptrB = ptrB->next;
}
}
// 两个指针开始同时往前
while (ptrA != nullptr) {
if (ptrA == ptrB) {
return ptrA;
}
ptrA = ptrA->next;
ptrB = ptrB->next;
}
return nullptr;
}