0
点赞
收藏
分享

微信扫一扫

构建自定义ChatGPT,微软推出Copilot Studio

思路:

        1. 我们算出两个链表的长度lenA,lenB。我们在这里最后判断一下,两个链表的尾节点是否是一样的,如果是相交链表,那它们的尾节点一定是一样的。

        2. 算出长链表和短链表的差距n(n = | lenA- lenB |)

        3. 让较长的那个链表往后走n步

        4. 短链表的指针 和 长链表的指针处于相同的位置,同时往后走,找到第一个相同的节点。

代码:

        

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    struct ListNode* curA = headA;
    struct ListNode* curB = headB;
    int lenA =0;
    int lenB =0;
    //两个链表的长度
    while(curA)
    {
        lenA++;
        curA = curA->next;
    }
    while(curB)
    {
        lenB++;
        curB = curB->next;
    }
    //如果是相交链表,尾节点一定是同一个
    if(curA != curB)
    {
        return NULL;
    }

    //利用假设法得出长链表和短链表
    struct ListNode* longlist = headA;
    struct ListNode* shortlist = headB ;
    if(lenA < lenB)
    {
        longlist = headB;
        shortlist = headA;
    }
    
    //长链表的长度 - 短链表的长度
    int n = abs(lenA - lenB);
    while(n--)
    {
        longlist=longlist->next;
    } 

    //找出第一个相同的节点
    while(longlist != shortlist)
    {
        longlist = longlist->next;
        shortlist = shortlist->next;
    }
    return shortlist;
}

举报

相关推荐

0 条评论