```function RandomListNode(x){
    this.label = x;
    this.next = null;
    this.random = null;
}
function Clone(pHead) {
            // write code here
            //Step1插入和赋值:在每一个节点N后插入一个此节点的复制N*,给复制节点的random赋值,每个节点的random指针指向的节点S的复制节点S*也会在S后面
            //Step2拆分和返回: 此时,所有原节点都是奇数节点,所有复制节点都是偶数节点,将偶数节点取出就是返回的链表
            if (!pHead) {
                return null
            }
            let temp = pHead
                //插入复制节点
            while (temp) {
                let copyNode = new RandomListNode(temp.label)
                copyNode.next = temp.next
                temp.next = copyNode
                temp = copyNode.next
            }
            //给复制节点random赋值,但注意如果.random是空的话要赋值空
            temp = pHead
            while (temp) {
                if (temp.random) {
                     temp.next.random = temp.random.next
                } 
                else{temp.next.random = null}
                temp = temp.next.next
            }
            //拆分节点
            temp = pHead.next //找到第一个偶数节点
            let root = new RandomListNode(0) //设置一个新的头节点
            let r = root
            while (temp) {
                r.next = temp //将原链表偶数节点赋给新链表
                r = r.next
                //判断是否为最后一个节点,如果是终止循环,如果不是,找到下一个偶数节点
                //如果不判断直接用.next.next的话,当temp是最后一个节点,temp.next是null,null.next无法读取,报错
                if(temp.next===null){break}
                temp = temp.next.next
            }
            return root.next
        }
module.exports = {
    Clone : Clone
};