138. Copy List with Random Pointer
"""
# Definition for a Node.
class Node:
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
self.val = int(x)
self.next = next
self.random = random
"""
class Solution:
def copyRandomList(self, head: 'Node') -> 'Node':
curr = head
copy = copy_head = Node(0)
table = {}
# 先複製好 Linked List ,並且建立映射 X -> X'
while curr:
copy.next = Node(curr.val)
copy = copy.next
table[curr] = copy
curr = curr.next
curr = head
copy = copy_head.next
while curr:
# 如果原圖形有隨機指向的節點
if curr.random:
# 找到在新圖形對應的節點 R -> R'
random = table[curr.random]
# 連結起來
copy.random = random
# 新舊 Linked List 一起移動起來
curr = curr.next
copy = copy.next
return copy_head.nextLast updated