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

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

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
    struct ListNode *p1,*p2,*longL,*shortL;
    p1 = pHead1;
    p2 = pHead2;
    if(pHead1 == NULL || pHead2 == NULL){
        return NULL;
    };
    int len1 = 0,len2 = 0,dist = 0;
    while(p1){
        p1 = p1 ->next;
        len1++;
    }
    while(p2){
        p2 = p2 -> next;
        len2++;
    }
    p1 = pHead1;
    p2 = pHead2;
    if(len1 >= len2){
        longL = p1;
        shortL = p2;
        dist = len1 - len2;
    }else{
        shortL = p1;
        longL = p2;
        dist = len2 - len1;
    }
    while(dist--){
        longL = longL -> next;
    }
    while(longL){
        if(longL == shortL){
            return longL;
        }
        else{
            longL = longL -> next;
            shortL = shortL -> next;
        }
    }
    return NULL;
}

定会同时遍历完,这样当两个链表指向同一个节点的时候,这个节点就是公共节点
全部评论

相关推荐

07-20 21:57
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务