【LeetCode】剑指 Offer II 023. 两个链表的第一个重合节点
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *pA=headA,*pB=headB;
int la=0,lb=0,temp;
while(pA){
++la;
pA=pA->next;
}
while(pB){
++lb;
pB=pB->next;
}
if(la>lb){
temp=la-lb;
headA=headA->next;
while(--temp){
headA=headA->next;
}
}
else if(la<lb){
temp=lb-la;
headB=headB->next;
while(--temp){
headB=headB->next;
}
}
while(headA){
if(headA==headB)
return headA;
headA=headA->next;
headB=headB->next;
}
return NULL;
}
};
思路:从头遍历两个链表,记录链表长度,此时再对齐两个链表,同时向后遍历以找到相交节点。

浙公网安备 33010602011771号