题目描述
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)
时间限制:1秒;空间限制:32768K;本题知识点:链表
解题思路
首先在原来链表A : {a, b, c,...}的基础上将每个节点复制一个在原节点之后A' : {a, a', b, b', c, c',...},并复制next指针和random指针,接下来重构一个链表,只包含复制的节点 B : {a', b', c',...}
# -*- 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 pHead==None:
return None
# 复制一个新节点加在之前节点后面,复制next指针
p = pHead
while p!=None:
new_node = RandomListNode(p.label)
new_node.next = p.next
p.next = new_node
p = p.next.next
# 复制节点的random指针
p = pHead
while p!=None:
if p.random!=None:
p.next.random = p.random.next
p = p.next.next
# 重构链表,只包含新复制的节点
vhead = RandomListNode(0)
q = vhead
p = pHead
while p!=None:
q.next = p.next
p.next = p.next.next
q = q.next
p = p.next
return vhead.next