编写一个程序,找到两个单链表相交的起始节点。
/**
* 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) {
if(!headA||!headB) return nullptr;
ListNode *countA=headA;
ListNode *countB=headB;
int lA=0;
int lB=0;
while(countA){
lA++;
countA=countA->next;
}
while(countB){
lB++;
countB=countB->next;
}
int i=lA>lB?lA-lB:lB-lA; //难点在解题办法,求出两个链表的长度差。每个链表遍历两次,时间复杂度O(n)
for(i;i>0;i--){
if(lA>lB) headA=headA->next;
else headB=headB->next;
}
while(headA){
if(headA==headB) return headA;
headA=headA->next;
headB=headB->next;
}
return nullptr;
}
};