Я решаю LeetCode NO. 138 и имеют два ответа, показанных в тексте ниже. Версия 1 работает, а версия 2. - нет.
Мне интересно, почему мне нужно использовать метод dictionary.get()
для оценки соответствующего значения узла. Это потому, что мы можем получить узел None, который не определен в пуле ключей словаря d
? Спасибо.
Версия 1.
"""
# Definition for a Node.
class Node:
def __init__(self, x, next=None, random=None):
self.val = int(x)
self.next = next
self.random = random
"""
class Solution:
def copyRandomList(self, head: 'Node') -> 'Node':
d = dict()
m = head
while m:
d[m] = Node(m.val)
m = m.next
n = head
while n:
d[n].next = d.get(n.next)
d[n].random = d.get(n.random)
n = n.next
return d[head]
Версия 2.
class Solution:
def copyRandomList(self, head: 'Node') -> 'Node':
d = dict()
m = head
while m:
d[m] = Node(m.val)
m = m.next
n = head
while n:
d[n].next = d[n.next]
d[n].random = d[n.random]
n = n.next
return d[head]