解法1:首先在旧链表中创建新链表,此时不处理新链表的兄弟结点;然后根据旧链表的兄弟结点,初始化新链表的兄弟结点;最后从旧链表中拆分得到新链表。
-_-!
![复制复杂链表的第一步](https://img-blog.csdnimg.cn/20190913103432426.png)
![复制复杂链表的第二步](https://img-blog.csdnimg.cn/20190913103608254.png)
![复制复杂链表的第三步](https://img-blog.csdnimg.cn/20190913103639787.png)
class Solution:
# 返回 RandomListNode
def Clone(self, pHead):
# write code here
if pHead == None:
return None
node = pHead#1。复制结点
while node != None:
#保存下一个结点next-->新建一个克隆结点-->指定node.next到克隆结点
#-->克隆结点的next指向next结点-->node为next结点
next1 = node.next
cloneNode = RandomListNode(node.label)
node.next = cloneNode
cloneNode.next = next1
node = next1
node = pHead#2.复制随机引用
while node != None:
if node.random != None:
node.next.random = node.random.next
node = node.next.next
node = pHead#3.分离两个链表
newHead = pHead.next#记录复制的链表的头结点
while node != None:
currNode = node.next#更新原结点的next
node.next = currNode.next#更新克隆结点的next
if currNode.next != None:
currNode.next = currNode.next.next
node = node.next#更新原结点指针
return newHead