02.07.-链表相交
title: 02.07. 链表相交
tag: 链表
categories: 代码随想录
02.07. 链表相交
ListNode* curA=headA;
ListNode* curB=headB;
int lenA=0,lenB=0;
while(curA!=NULL){lenA++;//A长度curA=curA->next;
}
while(curB!=NULL){lenB++;//B长度curB=curB->next;
}
curA=headA;
curB=headB;
//curA become max ,lenA is its length
if(lenB>lenA){swap(lenA,lenB);swap(curA,curB);
}
//求长度差
int gap= lenA-lenB;
while(gap--){curA=curA->next;
}
//遍历curA和curB 遇到相同则直接返回
while(curA!=NULL){if(curA==curB){return curA;}curA=curA->next;curB=curB->next;
}
return NULL;
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* curA=headA;ListNode* curB=headB;int lenA=0,lenB=0;while(curA!=NULL){lenA++;curA=curA->next;}while(curB!=NULL){lenB++;curB=curB->next;}//为什么还要再次赋值,因为上面next到了NULL,懂否,傻子curA = headA;curB = headB;if(lenB>lenA){swap(lenA,lenB);swap(curA,curB);}int gap=lenA-lenB;//移动while(gap){curA=curA->next;gap--;}while(curA!=NULL){if(curA==curB){return curA;}curA=curA->next;curB=curB->next;}return NULL;}
};