利用链表的特性,如果相交的话,后面就不可能岔开!
你可以想象把他们有同一个尾巴,然后从尾巴往前看。
所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
int len(struct ListNode* list){
int i=0;
while(list){
i++;
list=list->next;
}
return i;
}
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
if(!headA||!headB) return NULL;
int a=len(headA);
int b=len(headB);
if(a==b){
if(headA==headB) return headA;
}
while(a!=b){
if(a>b){
headA=headA->next;
a--;
}else if(b>a){
headB=headB->next;
b--;
}
}
while(headA!=headB && headA && headB){
headA=headA->next;
headB=headB->next;
}
if(!headA||!headB) return NULL;
return headA;
}
结果:
标签:面试题,ListNode,struct,int,02.07,next,链表,headB,headA From: https://www.cnblogs.com/llllmz/p/18041020