剑指 Offer 35. 复杂链表的复制

103 阅读1分钟

请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。

    let randomMap = []
    let nodeMap = new Map()
    let current1 = head
    let newHead = null
    let current2 = newHead
    let index = 0
    while(current1){
        let node = new Node(current1.val)
        randomMap[index++] = current1.random == null?null:current1.random
        if(newHead == null){
            newHead = node
            current2 = node
        }else{
            node.next = current2.next
            current2.next = node
            current2 = current2.next
        }
        nodeMap.set(current1,node)
        current1 = current1.next
    }
    current2 = newHead
    index = 0
    while(current2){
        current2.random = randomMap[index] == null?null:nodeMap.get(randomMap[index])
        index++
        current2 = current2.next
    }
    return newHead
};