https://leetcode.cn/problems/intersection-of-two-linked-lists/description/
<aside> 💡
思路:如果两个链表尾部相交,那么他们的尾部一定相同。所以只比较尾部即可。
思路如图:
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
// 1.计算AB两个链表的长度
int sizeA = 0, sizeB = 0;
for (ListNode* tmp = headA; tmp; tmp = tmp->next) {
++sizeA;
}
for (ListNode* tmp = headB; tmp; tmp = tmp->next) {
++sizeB;
}
// 2.将A和B移到距尾节点相同距离的位置
if (sizeA > sizeB) {
for (int i = 0; i < sizeA - sizeB; ++i) {
headA = headA->next;
}
} else {
for (int i = 0; i < sizeB - sizeA; ++i) {
headB = headB->next;
}
}
// 3.A和B共同向前遍历链表直到相遇或到达尾后节点
while (headA) {
if (headA == headB) {
break;
}
headA = headA->next;
headB = headB->next;
}
return headA;
}