- 首先复制新节点到每个源节点的后面,即next节点。然后复制新节点的random节点,这里因为有了新节点,
所以random节点块与题给的样式相同。最后拆分新旧节点,先设置一个新节点的头结点,然后拆分属于新节点的那个节点连续块。
一种普通方法,一种递归方法。注意递归时有两个next,一个是该节点的next指向,另一个是下一个节点的内容
class RandomListNode: def __init__(self, x): self.label = x self.next = None self.random = None class Solution: # 返回 RandomListNode def Clone(self, pHead): if pHead is None: return None ptmp = pHead while ptmp: node = RandomListNode(ptmp.label) node.next = ptmp.next ptmp.next = node ptmp = node.next ptmp = pHead while ptmp: if ptmp.random: ptmp.next.random = ptmp.random.next ptmp = ptmp.next.next old = pHead new = pHead.next node = pHead.next while old: old.next = old.next.next if new.next: new.next = new.next.next new = new.next old = old.next return node def Clone(self, pHead): if pHead is None: return None newphead = RandomListNode(pHead.label) newphead.next = pHead.next newphead.random = pHead.random newphead.next = self.Clone(pHead.next) return newphead