LeetCode 160. 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
图示两个链表在节点 c1 开始相交:
题目数据 保证 整个链式结构中不存在环。
代码
先对齐链表尾端,从短的链表的长度开始,一一比较。
//给你两个单链表的头节点 headA 和 headB ,
// 请你找出并返回两个单链表相交的起始节点。
// 如果两个链表不存在相交节点,返回 null 。
ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) {
if (headA == nullptr || headB == nullptr)
return nullptr;
int sizeA = 0, sizeB = 0;
ListNode* pa = headA, * pb = headB;
while (pa != nullptr) {
sizeA++;
pa = pa->next;
}
while (pb != nullptr) {
sizeB++;
pb = pb->next;
}
pa = headA;
pb = headB;
if (sizeA > sizeB) {
while (sizeA-- > sizeB)
pa = pa->next;
}
else if (sizeB > sizeA) {
while (sizeB-- > sizeA)
pb = pb->next;
}
while (pa != nullptr) {
if (pa == pb)
return pa;
pa = pa->next;
pb = pb->next;
}
return nullptr;
}