#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; }