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

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

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

如果链表A和B有一个为空,两者无法相交,返回null。 都不为空时,创建p1和p2分别指向A和B的头节点。p1和p2不相等就移动p1,p2遍历两个链表。 alt

当p1走到尾指向null,p2指向c3时,将p1移动到链表B的头节点。 alt

p1往前走到b2,同时p2走到未指向null,将p2移动链表A的头节点。

alt 变成这样: alt 同时再移动下一个节点就能找到相交节点 alt

这样做的原因是让两个指针移动的步长相等,步长相等,如果有相交的节点,就可以同时到达,跳出循环,返回p1或p2 alt 如果没有相交的节点,两个指针会遍历完两个链表,都会指向null,返回,符合题意。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function FindFirstCommonNode(pHead1, pHead2)
{
    // write code here
     if(!pHead1 || !pHead2) return null;

    let p1 = pHead1;
    let p2 = pHead2;

    while(p1 !== p2){
        if(p1 == null){
            p1 = pHead2;
        }else{
            p1 = p1.next;
        }

        if(p2 == null){
            p2 = pHead1;
        }else{
            p2 = p2.next;
        }
    }

    return p1;
}
module.exports = {
    FindFirstCommonNode : FindFirstCommonNode
};
全部评论

相关推荐

2024-12-05 15:53
中南大学 Java
点赞 评论 收藏
分享
2024-12-07 16:16
已编辑
四川大学 Java
点赞 评论 收藏
分享
评论
5
1
分享

创作者周榜

更多
牛客网
牛客企业服务