复杂链表的复制
Less 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)