题解 | #复杂链表的复制#

复杂链表的复制

http://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba

```function RandomListNode(x){
    this.label = x;
    this.next = null;
    this.random = null;
}
function Clone(pHead)
{
    // write code here
    //思路:复制插入节点,赋值random,拆分节点
    if(pHead===null){return null}
    //复制插入节点
    let temp = pHead
    while(temp){
        let copyNode =new RandomListNode(temp.label)
        copyNode.next = temp.next
        temp.next = copyNode
        temp = temp.next.next
    }
    //赋值复制节点的random
    temp = pHead
    while(temp){
        if(temp.random){
            temp.next.random = temp.random.next //复制节点紧邻原节点,复制节点的random节点也紧邻原节点的random节点
        } else{temp.next.random = null}
        temp = temp.next.next
    }
    //拆分节点
    let root = pHead.next //取出原链表偶数节点依次赋给新链表的节点
    let r = root
    temp = pHead.next
    while(temp){
        if(temp.next===null){break} 
        temp = temp.next.next//此处需要先判断是否为最后的节点,若没有判断:temp.next为null时,解析null.next报错
        r.next = temp
        r = r.next
    }
    //返回新链表头节点
    return root
}
module.exports = {
    Clone : Clone
};
全部评论

相关推荐

自来熟的放鸽子能手面...:这个不一定,找hr跟进一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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