почему dictionary.get (node.next) не эквивалентен словарю [node.next] в этом случае? - PullRequest
0 голосов
/ 09 апреля 2020

Я решаю 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]

1 Ответ

0 голосов
/ 09 апреля 2020

Есть две петли. Первый цикл повторяется до тех пор, пока m.next не станет "ложным"

while m:
    d[m] = Node(m.val)
    m = m.next

, что l oop заполняет поле .next:

while n:
    d[n].next = d.get(n.next)
    d[n].random = d.get(n.random)
    n = n.next

, если n.next не в d, тогда d[n].next равно None. На этом «связанный список» заканчивается.

Если бы мы использовали здесь d[n.next], он бы выбросил KeyError: не то, что мы хотим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...