题目:
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
解答:
思路参考:《苦练算法》-剑指Offer- 二十五、复杂链表的复制 -python编写
先复制原来链表
复制相互之间的random关系
将两个链表拆分
# -*- 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
if not pHead:
return pHead
cloneNode=pHead
# 复制链表
while cloneNode:
node=RandomListNode(cloneNode.label)
node.next=cloneNode.next
cloneNode.next=node
cloneNode=node.next
cloneNode=pHead
# 复制相互之间的random指向
while cloneNode:
if cloneNode.random:
cloneNode.next.random=cloneNode.random.next
cloneNode=cloneNode.next.next
cloneNode=pHead
pHead=pHead.next
# 将两个列表拆分
while cloneNode.next:
node=cloneNode.next
cloneNode.next=node.next
cloneNode=node
return pHead