遍历完A
链表后,将链表指向B
链表;
遍历完B
链表后,将链表指向A
链表;
- 先判断
A
、B
链表是否有空链表,如果有,直接返回空 - 注意判断节点相等是
curA == curB
,而不是curA->val == curB->val && curA->next == curB->next
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode* curA = headA;
struct ListNode* curB = headB;
int headAreturn = 0;
int headBreturn = 0;
if (curA == NULL || curB == NULL) {
return NULL;
}
while (curA || curB) {
if (curA == curB) {
return curA;
}
if (curA->next != NULL) {
curA = curA->next;
} else if (curA->next == NULL && !headAreturn) {
headAreturn = 1;
curA = headB;
} else if (curA->next == NULL && headAreturn){
break;
}
if (curB->next != NULL) {
curB = curB->next;
} else if (curB->next == NULL && !headBreturn) {
headBreturn = 1;
curB = headA;
} else if (curB->next == NULL && headBreturn){
break;
}
}
return NULL;
}