Advertisement
jinhuang1102

138. Copy List with Random Pointer

Dec 12th, 2018
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.70 KB | None | 0 0
  1. # Definition for singly-linked list with a random pointer.
  2. # class RandomListNode(object):
  3. #     def __init__(self, x):
  4. #         self.label = x
  5. #         self.next = None
  6. #         self.random = None
  7.  
  8. class Solution(object):
  9.     def copyRandomList(self, head):
  10.         """
  11.        :type head: RandomListNode
  12.        :rtype: RandomListNode
  13.        """
  14.         if not head:
  15.             return head
  16.         # First,复制一个新的Node,插到旧的Node的后面
  17.         #
  18.         #  head -> node_a -> 新node_a -> node_b -> 新node_b -> node_c -> 新node_c -> ..>  -None
  19.         #
  20.         temp = head
  21.         while temp:
  22.             newNode = RandomListNode(temp.label)
  23.             newNode.next = temp.next
  24.             temp.next = newNode
  25.             temp = newNode.next
  26.        
  27.         # Second, 处理random pointer,
  28.         #
  29.         # head -> node_a -> 新node_a -> node_b -> 新node_b -> node_c -> 新node_c -> ..>  -None
  30.         #
  31.         # 如果node的random pointer 不是None,新node.random 应该指向node.random指向的 node 的下一个,
  32.         # 因为node的下一个是这个node的copied node
  33.         #
  34.         temp = head
  35.         while temp:
  36.             if temp.random:
  37.                 temp.next.random = temp.random.next
  38.             temp = temp.next.next
  39.        
  40.         # Finally, 重组旧的Linked list , and extract the new nodes
  41.         ret = RandomListNode(0)
  42.         new_temp = ret
  43.         temp = head
  44.         while temp:
  45.             new_temp.next = temp.next
  46.             new_temp = new_temp.next
  47.             next_old = temp.next.next
  48.             temp.next = next_old
  49.             temp = temp.next
  50.         return ret.next
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement