用字典,把原链表的每个节点对应到新的节点,然后再扫描原节点,把特殊指针补上
# -*- coding:utf-8 -*- # class RandomListNode: # def __init__(self, x): # self.label = x # self.next = None # self.random = None class Solution: # 返回 RandomListNode def Clone(self, pHead): # write code here #扫2遍? if not pHead: return None #node 与 node之间映射 nHead = RandomListNode(pHead.label) nCurrent = nHead pCurrent = pHead.next mapper = {} mapper[id(pHead)] = nHead mapper[id(None)] = None while pCurrent: node = RandomListNode(pCurrent.label) nCurrent.next = node nCurrent = nCurrent.next mapper[id(pCurrent)] = nCurrent pCurrent = pCurrent.next pCurrent = pHead nCurrent = nHead while pCurrent: nCurrent.random = mapper[id(pCurrent.random)] pCurrent = pCurrent.next nCurrent = nCurrent.next return nHead
原文:https://www.cnblogs.com/wangzhihang/p/11796247.html