LeetCode 138. Copy List with Random Pointer
剑指offer
题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。
思路:
1、将每一个结点复制一份放在原节点之后
2、复制原结点的random指针
3、将原始链表和复制的链表分离
共需遍历三遍链表
python代码如下:
# 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 None
# 第一步,拷贝结点
res1 = pHead
while res1:
temp = res1.next
res1.next = RandomListNode(res1.label)
res1.next.next = temp
res1 = res1.next.next
# 第二步,拷贝random指针
res2 = pHead
while res2 and res2.next:
if res2.random:
res2.next.random = res2.random.next
res2 = res2.next.next
# 第三步,分离链表
res3 = pHead
res = pHead.next
result = res
while res3:
res3.next = res.next
res3 = res3.next
if res3:
res.next = res3.next
res = res.next
else:
res.next = None
return result