138. Copy List with Random Pointer

题目:

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)

你可能感兴趣的:(138. Copy List with Random Pointer)