复杂链表的复制

Mr.ClarkLess than 1 minute

复杂链表的复制

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

输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
class Node:
    def __init__(self, x, next=None, random=None):
        self.val = int(x)
        self.next = next
        self.random = random

def copyRandomList( head):
    """
    :type head: Node
    :rtype: Node
    """
    result = None
    node2index = {}
    copyedNode = []
    idx = 0
    while head:
        node2index[head] = idx                 #用字典存入节点的索引位置
        cp_node = Node(head.val)               #复制节点
        copyedNode.append((cp_node, head.random))     #列表存入链表节点和random
        idx += 1
        head = head.next

    for i in range(len(copyedNode)):
        if i < len(copyedNode) - 1:
            copyedNode[i][0].next = copyedNode[i + 1][0]
        if copyedNode[i][1]:
            copyedNode[i][0].random = copyedNode[node2index[copyedNode[i][1]]][0]
    if copyedNode:
        result = copyedNode[0][0]
    return result

a=Node(3)
b=a.next=(Node(2))
b.random=a
print(a.val)
print(b.val)
print(copyRandomList(a).val)