思路参考博客:http://blog.csdn.net/nomasp/article/details/50572819
代码如下:
/**
* 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==NULL)||(headB==NULL))
return NULL;
ListNode* listA = headA;
ListNode* listB = headB;
while((listA!=NULL) && (listB!=NULL))
{
if(listA==listB)
return listA;
listA = listA->next;
listB = listB->next;
if(listA == listB)
return listA;
if(listA==NULL)
listA = headB;
if(listB==NULL)
listB = headA;
}
return listA;
}
};
之前我以为在listA = listA->next 和listB=listB->next之后的那个判断if(listA==listB)是一个重复的,因为对于修改后的listA和listB,之后又重新循环的时候进行判断了一次,所以重复。其实这句话很关键,如果没有listA==listB,如果数组A:a1 a2 数组B:b1 b2 b3就会一直重复下去,有了这句话,在a1 a2 b1 b2 b3 和b1 b2 b3 a1 a2之后listA和listB都是空,就返回了