LeetCode Copy List with Random Pointer


LeetCode解題のCopy List with Random Pointer
原題
チェーンテーブル内の各ノードには、チェーンテーブル内の任意のノードまたは空のノードを指す追加のランダムポインタがあります.このチェーンテーブルを深くコピーします.
注意点:
  • なし
    例:
    入力:略
    出力:略
    問題を解く構想.
    新しく追加したポインタはともかく、チェーンテーブルを通常のチェーンテーブルとしてコピーするのが考えやすい.新しく追加されたポインタは任意のノードを指すことができるので、元のノードとコピーされたノードをマッピング関係にすることができ、任意のノードに対応するコピーノードを見つけることができます.その後、元のチェーンテーブルを再度巡回し、任意のポインタをコピーします.
    チェーンテーブルのコピーは、ノードデータのコピーとノード関係のコピーの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)を使用して、関連するソースコードを取得します.