LeetCode Copy List with Random Pointer
LeetCode解題のCopy List with Random Pointer
原題
チェーンテーブル内の各ノードには、チェーンテーブル内の任意のノードまたは空のノードを指す追加のランダムポインタがあります.このチェーンテーブルを深くコピーします.
注意点: なし
例:
入力:略
出力:略
問題を解く構想.
新しく追加したポインタはともかく、チェーンテーブルを通常のチェーンテーブルとしてコピーするのが考えやすい.新しく追加されたポインタは任意のノードを指すことができるので、元のノードとコピーされたノードをマッピング関係にすることができ、任意のノードに対応するコピーノードを見つけることができます.その後、元のチェーンテーブルを再度巡回し、任意のポインタをコピーします.
チェーンテーブルのコピーは、ノードデータのコピーとノード関係のコピーの2つのステップと見なすことができます.すべてのノードをコピーして辞書に保存することもできます.チェーンテーブルを巡回し、2つのポインタをコピーします.任意のポインタが空のポインタを指す可能性があるため、辞書に空のポインタ項目を追加します.
ACソース
原題
チェーンテーブル内の各ノードには、チェーンテーブル内の任意のノードまたは空のノードを指す追加のランダムポインタがあります.このチェーンテーブルを深くコピーします.
注意点:
例:
入力:略
出力:略
問題を解く構想.
新しく追加したポインタはともかく、チェーンテーブルを通常のチェーンテーブルとしてコピーするのが考えやすい.新しく追加されたポインタは任意のノードを指すことができるので、元のノードとコピーされたノードをマッピング関係にすることができ、任意のノードに対応するコピーノードを見つけることができます.その後、元のチェーンテーブルを再度巡回し、任意のポインタをコピーします.
チェーンテーブルのコピーは、ノードデータのコピーとノード関係のコピーの2つのステップと見なすことができます.すべてのノードをコピーして辞書に保存することもできます.チェーンテーブルを巡回し、2つのポインタをコピーします.任意のポインタが空のポインタを指す可能性があるため、辞書に空のポインタ項目を追加します.
ACソース
# Definition for singly-linked list with a random pointer.
class RandomListNode(object):
def __init__(self, x):
self.label = x
self.next = None
self.random = None
class Solution(object):
def copyRandomList(self, head):
""" :type head: RandomListNode :rtype: RandomListNode """
if not head:
return None
visited = dict()
node = head
while node:
visited[node] = RandomListNode(node.label)
node = node.next
visited[None] = None
node = head
while node:
visited[node].next = visited[node.next]
visited[node].random = visited[node.random]
node = node.next
return visited[head]
if __name__ == "__main__":
None
私のGithub(https://github.com/gavinfish/LeetCode-Python)を使用して、関連するソースコードを取得します.