題目:
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.
思路和注意點:
1.答案很多特別屌的解法,學到一個知識點, python里的object是可hash的!
2.然后這道題里, trick part 就是其實第一遍過了整個list,就可以吧所有新的node 生成, 第二次就不用生成新的了。 這兩道題類似,可以總結提高。
Python:
# Definition for singly-linked list with a random pointer.
# class RandomListNode(object):
# def __init__(self, x):
# self.label = x
# self.next = None
# self.random = None
class Solution(object):
def copyRandomList(self, head):
"""
:type head: RandomListNode
:rtype: RandomListNode
"""
#seems not hard, try first time, list varible is unhashable,but object is hashable!!!!
dick = {}
m = n = head
while m:
dick[m] = RandomListNode(m.label)
m = m.next
while n:
dick[n].next = dick.get(n.next)
dick[n].random = dick.get(n.random)
n = n.next
return dick.get(head)