判断两个链表是否相交,相交则返回两个链表相交的结点
为了让判断两个链表是否相交,我们首先要做的就是将两个链表进行"对齐".(两个链表相交也就是说,从相交的结点开始,后面两个链表内容相同).
所以我们的思路就是首先通过链表遍历,求出两个链表的长度,得到其差值.
创建两个指针分别指向这两个链表的头位置.
然后对较长的链表开始从头遍历差值部分.
接下来让两个指针一起向前走,直至相遇则得到两链表相交结点,否则两链表不想交.
SListNode* getIntersectionNode(SList* listA, SList* listB){
int lenA = 0;
int lenB = 0;
SListNode* cur;
SListNode* headlong = listA;
SListNode* headshort = listB;
int gap;
int i;
for (cur = listA->_head; cur; cur = cur->_next){
lenA++;
}
for (cur = listB->_head; cur; cur = cur->_next){
lenB++;
}
gap = lenA - lenB;
if (gap < 0){
gap *= -1;
headlong = listB->_head;
headshort = listA->_head;
}
for (i = 0; i < gap; ++i){
headlong = headlong->_next;
}
for (; headlong; headlong = headlong->_next, headshort = headshort->_next){
if (headlong == headshort){
return headlong;
}
}
return NULL;
}