リンクされたリストは、各ノードがリストまたはヌル内の任意のノードを指すことができ、追加のランダムポインタを含むように与えられます。
リストの深いコピーを返します。
リンクされたリストは、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