思路:
1. 我们算出两个链表的长度lenA,lenB。我们在这里最后判断一下,两个链表的尾节点是否是一样的,如果是相交链表,那它们的尾节点一定是一样的。
2. 算出长链表和短链表的差距n(n = | lenA- lenB |)
3. 让较长的那个链表往后走n步
4. 短链表的指针 和 长链表的指针处于相同的位置,同时往后走,找到第一个相同的节点。
代码:
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {struct ListNode* curA = headA;struct ListNode* curB = headB;int lenA =0;int lenB =0;//两个链表的长度while(curA){lenA++;curA = curA->next;}while(curB){lenB++;curB = curB->next;}//如果是相交链表,尾节点一定是同一个if(curA != curB){return NULL;}//利用假设法得出长链表和短链表struct ListNode* longlist = headA;struct ListNode* shortlist = headB ;if(lenA < lenB){longlist = headB;shortlist = headA;}//长链表的长度 - 短链表的长度int n = abs(lenA - lenB);while(n--){longlist=longlist->next;} //找出第一个相同的节点while(longlist != shortlist){longlist = longlist->next;shortlist = shortlist->next;}return shortlist;
}