题解 | #两个链表的第一个公共结点#

两个链表的第一个公共结点

https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
 */
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
    // write code here
    if(pHead1 == NULL || pHead2 == NULL) return NULL;
    int l1 = 0, l2 = 0;
    struct ListNode *p1 = pHead1, *p2 = pHead2;
    while(p1 != NULL) {
        l1++;
        p1 = p1->next;
    }
    while(p2 != NULL) {
        l2++;
        p2 = p2->next;
    }
    p1 = pHead1;
    p2 = pHead2;
    if(l1 > l2) {
        int n = l1 - l2;
        while(n > 0) {
            n--;
            p1 = p1->next;
        }
    } else {
        int n = l2 - l1;
        while(n > 0) {
            n--;
            p2 = p2->next;
        }
    }
    while(p1 != NULL && p2 != NULL && p1 != p2) {
        p1 = p1->next;
        p2 = p2->next;
        if(p1 == p2) break;
    }
    if(p1 == p2) {
        return p1;
    } else {
        return NULL;
    }
}

全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务