llllmz

导航

面试题 02.07. 链表相交C

利用链表的特性,如果相交的话,后面就不可能岔开!

你可以想象把他们有同一个尾巴,然后从尾巴往前看。

所以只要知道两个链表的长度,就可以在同一起跑线上一起比较了。

/**
 * 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;
}

结果:

posted on 2024-02-28 16:47  神奇的萝卜丝  阅读(16)  评论(0)    收藏  举报