链表相交
分情况讨论:
1. 两个链表不一样长
1.1 有交点
AC + BD = BC +AD;两条链表分别被完整遍历过一次,在交换遍历中找到交点。
1.2 没有交点
链表A + 链表B = 链表B + 链表A;最后同时指向nullptr
2. 两个链表一样长(进入if判断前就结束了)
2.1 有交点
两条链表一样长的话,会在第一次遍历中同时遇到交点
2.2 无交点
第一次遍历之后同时指向nullptr(不会进入if判断)
代码
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* l1 = headA;
ListNode* l2 = headB;
while(l1 != l2){
if(!l1) l1 = headB;
else l1 = l1->next;
if(!l2) l2 = headA;
else l2 = l2->next;
}
return l1;
}