LeetCode练习相交链表
//相交链表
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(headA==NULL||headB==NULL){
return NULL;
}
struct ListNode* a=headA;
struct ListNode* b=headB;
int lenA=0;
int lenB=0;
int len=0;
//计算heada的长度
while(a){
lenA++;
a=a->next;
}
//计算headb的长度
while(b){
lenB++;
b=b->next;
}
//长的链表先走它们之间做差之后的步数
if(lenA>lenB){
len=lenA-lenB;
while(len){
headA=headA->next;
len--;
}
}
if(lenB>lenA){
len=lenB-lenA;
while(len){
headB=headB->next;
len--;
}
}
//在同时走,若相遇即为相交处
while(headA&&headB){
if(headA==headB){
return headA;
}else{
headA=headA->next;
headB=headB->next;
}
}
return NULL;
}