两个链表的第一个公共结点(递归解法,js)

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

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

首先判断:
1、当前两个节点是否为相等,相等这返回该节点以及节点的索引
2、链表是否已到链尾,是则返回空
然后:

let left = findFirst(p1.next,p2,k+1)
let right = findFirst(p1,p2.next,k+1)

left: 代表p1移到下一个节点,与p2比较
right: 代表p2移到下一个节点,与p1比较
进行以下判断
left和right是否都为空(代表向下找不到公共节点) 返回空
如果left、right都不为空,则比较两者k的大小,返回小的那个
如果一个为空一个不为空,则返回不为空的那个

这里的思路主要是,递归比较,如果有就返回这个节点+节点的索引值,找不到则返回null
找到两个则返回索引值小的那个,找到一个则直接返回结果。

/*function ListNode(x){
    this.val = x;
    this.next = null;
}*/
function FindFirstCommonNode(pHead1, pHead2)
{
    // write code here
    let first = null
    first =  findFirst(pHead1,pHead2,1)
    if(first == null) return null
    return first[0]
}
function findFirst(p1,p2,k){
    if(p1 == p2){
        return [p1,k];
    }
    if(p1 == null || p2 == null) return null
    let left = findFirst(p1.next,p2,k+1)
    let right = findFirst(p1,p2.next,k+1)
    if(left == null && right == null) return null
    if(left !=null && right != null){
        if(left[1]<right[1]){
            return left
        }else{
            return right
        }
    }
    if(left != null) return left
    if(right !=null) return right
}
module.exports = {
    FindFirstCommonNode : FindFirstCommonNode
};
全部评论

相关推荐

人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
07-14 12:29
门头沟学院 Java
后端岗,实习三周感觉有点想跑路了,担心秋招被拉黑,有没有佬是字节HR知道情况的
从零开始的转码生活:你实习三周都想跑路,将来拿到offer真的愿意在这干十几二十年吗
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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