原题
https://leetcode.com/problems/copy-list-with-random-pointer/
解法
字典. 使用字典d, d的键是原节点, 值是复制的节点, 遍历链表两次, 第一次遍历是构造字典的键值对, 第二次遍历时, 将原节点的next和random复制到新节点中.
Time: O(2*n)
Space: O(n)
代码
"""
# Definition for a Node.
class Node(object):
def __init__(self, val, next, random):
self.val = val
self.next = next
self.random = random
"""
class Solution(object):
def copyRandomList(self, head):
"""
:type head: Node
:rtype: Node
"""
d = dict()
m = n = head
while m:
d[m] = Node(m.val,None, None)
m = m.next
while n:
d[n].next = d.get(n.next)
d[n].random = d.get(n.random)
n = n.next
return d.get(head)