您的位置:首页 > 运维架构

copy-list-with-random-pointer

2017-09-22 13:18 253 查看
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

class Node(object):
def __init__(self, val, p=None, r=None):
self.data = val
self.next = p
self.random = r

def Creatlist(n):
if n <= 0:
return False
   if n == 1:
return Node(1)
else:
root = Node(1)
tmp = root
for i in range(2, n + 1):
tmp.next = Node(i)
tmp = tmp.next
return root

def addRanodm(head):
p = head
while p.next and p.next.next:
p.random = p.next.next
p = p.next.next.next
return head

def printlist(head):
p = head
while p !
9641
= None:
if p.random:
print [p.data, p.random.data]
else:
print [p.data]
p = p.next

class Solution(object):
def copyList(self, head):
if head is None:
return head
p = head
while p is not None:
newNode = Node(p.data)
temp = p.next
p.next = newNode
newNode.next = temp
p = temp
p = head
while p is not None:
if p.random is not None:
p.next.random = p.random.next
p = p.next.next
p = head
newHead = head.next
while p.next is not None:
temp = p.next
p.next = p.next.next
p = temp
return newHead

head = addRanodm(Creatlist(8))
printlist(head)
print "-------------------------"
P = Solution()
newhead = P.copyList(head)
printlist(newhead)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: