题目描述:编写一个程序,找到两个单链表相交的起始节点。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ebaee32fa0e5cdf300eaaa1d2005e3c2.png)
代码解析: 链表a 走了len(a)+【len(b)-len(公共部分)】;链表b 走了len(b)+【len(a)-len(公共部分)】最终会找到交点。
代码:
/**
* 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*p1=headA;
ListNode*p2=headB;
if(p1==NULL||p2==NULL) return NULL;
while(p1!=NULL&&p2!=NULL&&p1!=p2){
p1=p1->next;
p2=p2->next;
if(p1==p2) return p1;
if(p1==NULL) p1=headB;
if(p2==NULL) p2=headA;
}
return p1;
}
};