当前位置 : 主页 > 编程语言 > c语言 >

[Leetcode]找出链表公共结点

来源:互联网 收集:自由互联 发布时间:2023-09-07
力扣链接 思路: 先求出两个链表的长度差 长链表先走差距步 同时走,第一个地址相同的是交点 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */stru

力扣链接


[Leetcode]找出链表公共结点_链表

思路:

先求出两个链表的长度差

长链表先走差距步

同时走,第一个地址相同的是交点


代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {

    struct ListNode* tailA = headA,* tailB = headB;
    int lenA = 1, lenB = 1;
    while(tailA->next)
    {
        tailA = tailA->next;
        ++lenA; 
    }
    while(tailB->next)
    {
        tailB = tailB->next;
        ++lenB;
    }
    if(tailA != tailB)
    {
        return NULL;
    }

    int gap = abs(lenA - lenB);
    struct ListNode* longList = headA,* shortList = headB;
    if(lenA<lenB)
    {
        longList = headB;
        shortList = headA;
    }
    while(gap--)
    {
        longList= longList->next;
    }

    while(longList !=shortList)//比较的是地址
    {
        longList = longList->next;
        shortList = shortList->next;
    }
    return longList;

}
上一篇:【数据结构 & 空间复杂度】
下一篇:没有了
网友评论