题目描述
解题思路
定义双指针 pa 和 pb ,分别指向 headA 和 headB ,然后两个指针同时遍历链表,当 pa 为空时,则令 pa 指向 headB , pb 同理,这样两个链表如果有相交,则两个指针一定会有相等的时候,当碰到同一结点则返回该结点,当 pb 空了两次,则证明两个链表没有相交结点,返回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* pa=headA;
ListNode* pb=headB;
while(pb){
if(pa&&pa==pb) return pa;
pa=pa->next;
pb=pb->next;
if(!pa) pa=headB;
}
pb=headA;
while(pb){
if(pa&&pa==pb) return pa;
pa=pa->next;
pb=pb->next;
if(!pa) pa=headB;
}
return NULL;
}
};