力扣 160.
这里相交是末端相交,即不会出现中间相交后面又分开的情况的。长度不一样不知道哪个和哪个比较,所以利用指针,移动到余下结点一样长
需要求两个链表长度
//退出循环后,cur是最后一个结点,并且最后一个结点不进入循环内
while(cur->next != nullptr){}
//退出循环后,cur是最后一个结点后面的一个结点,并且最后一个结点进入循环内
while(cur != nullptr){}
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* curA = headA;
ListNode* curB = headB;
int lenA=0;//不能连在一起写
int lenB=0;
while(curA != nullptr){
lenA++;
curA = curA->next;
}
while(curB != nullptr){
lenB++;
curB = curB->next;
}
curA = headA;
curB = headB;
// 让curA为最长链表的头,lenA为其长度
if(lenA < lenB){
swap(lenA,lenB);
swap(curA,curB);
}
int n = lenA-lenB;
while(n--){
curA = curA->next;
}
while(curA != nullptr){
//直接看结点同不同
if(curA == curB) return curA;
curA = curA->next;
curB = curB->next;
}
return NULL;
}
};