leetcodeブラシのタイトル・ノート(のpython3) - ランダムなポインタで138コピーのリスト。

ランダムなポインタで138コピー一覧

リンクされたリストは、各ノードがリストまたはヌル内の任意のノードを指すことができ、追加のランダムポインタを含むように与えられます。

リストの深いコピーを返します。

リンクされたリストは、n個のノードのリストのような入力/出力に示されています。各ノードは、一対の[ヴァル、random_index]として表されます。

ヴァル:Node.val表す整数
random_indexを:ノードのインデックス(0からN-1までの範囲)ランダムポインタポイントに、またはnullそれは任意のノードにポイントしない場合。

例1:
ここに画像を挿入説明

入力:ヘッド= [[7、NULL]、[13.0]、[11,4]、[10,2]、[1,0]
出力:[[7、NULL]、[13.0]、 [11,4]、[10,2]、[1,0]
実施例2:
ここに画像を挿入説明
入力:ヘッド= [1,1]、[2,1]
出力:[1,1]、[2,1 1]
実施例3:
ここに画像を挿入説明
入力:ヘッド= [3、NULL]、[3,0]、[3、ヌル]
出力:[3、NULL]、[3,0]、[3、NULL]
例4:

入力:ヘッド= []
出力:[]
説明:リンクリストを考えると、リターンヌルので、空(NULLポインタ)です。

制約:

-10000 <= Node.val <= 10000
Node.randomは、リンクされたリスト内のノードにヌルやポインティングあります。
ノードの数は1000年を超えることはありません。

138面の問題からleetcodeはのpython3のに賛成してgolangサポートを開始していなかった
問題解決のアイデア

class Solution:
    def copyRandomList(self, head: 'Node') -> 'Node':
        nodeDict = dict()
        curr = Node(head.val,None,None)
        nodeDict[head] = curr
        res = curr
        node = head
        while node:
            n = Node(node.val,node.next,None)
            nodeDict[node] = n
            curr.next = n
            curr,node = curr.next,node.next

        node = head
        while node:
            if node.random:
                nodeDict[node].random = nodeDict[node.random]
            node = node.next
        return res
公開された98元の記事 ウォンの賞賛0 ビュー1459

おすすめ

転載: blog.csdn.net/weixin_44555304/article/details/104409822