通过hashmap 保存节点,然后再去遍历串起链表。 hashmap存储节点时候需要新建一个randomlistnode。
注意返回的是 hashmap[pHead]
# -*- 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
s=l=pHead
hashmap={}
while l!=None:
hashmap[l]=RandomListNode(l.label)
l=l.next
while s!=None:
node=hashmap[s]
#print(node.label)
if s.next:
node.next=hashmap[s.next]
else:
node.next=None
if s.random:
node.random=hashmap[s.random]
else:
node.random=None
s=s.next
return hashmap[pHead]先将链表节点每个复制一下,然后连在当前节点后面,然后再遍历一次,将random指针安排好,最后将链表拆分,注意先拆分"原链表"。
class Solution:
# 返回 RandomListNode
def Clone(self, pHead):
# write code here
if pHead==None:
return None
l=pHead
while l!=None:
node=RandomListNode(l.label)
node.next=l.next
l.next=node
l=node.next
s=pHead
while s!=None and s.next!=None:
if s.random:
s.next.random=s.random.next
s=s.next.next
result=p=pHead.next
#result=RandomListNode(0)
f=pHead
while p.next!=None:
f.next=f.next.next
p.next=p.next.next
p=p.next
f=f.next
f.next=None
return result
京公网安备 11010502036488号