- 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交:
/**
* 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* a = headA;
ListNode* b = headB;
int n = 0;
while(a){
a = a->next;
n++;
}
while(b){
b = b->next;
n++;
}
a = headA;
b = headB;
while(a != b && n >= 0){
if(a->next == NULL)
a = headB;
else
a = a->next;
if(b->next == NULL)
b = headA;
else
b = b->next;
n--;
}
if(a == b && a != NULL)
return a;
else
return NULL;
}
};
经验: 做过了。。。