- 首先复制新节点到每个源节点的后面,即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

京公网安备 11010502036488号