euisblue
138. Copy List with Random Pointer

Ruby Solution 1

1# Definition for Node. 2# class Node 3# attr_accessor :val, :next, :random 4# def initialize(val = 0) 5# @val = val 6# @next = nil 7# @random = nil 8# end 9# end 10 11# @param {Node} node 12# @return {Node} 13def copyRandomList(head) 14 curr = head 15 copy_head = head.clone 16 copy_curr = copy_head 17 18 random_list = {} 19 random_list[head.object_id.to_s.to_sym] = copy_head 20 21 # copy next 22 while curr 23 curr = curr.next 24 copy_curr.next = curr.clone if curr 25 copy_curr = copy_curr.next 26 random_list[curr.object_id.to_s.to_sym] = copy_curr if copy_curr 27 end 28 29 # copy random 30 curr = head 31 copy_curr = copy_head 32 while curr 33 copy_curr.random = random_list[curr.random.object_id.to_s.to_sym] if curr.random 34 curr = curr.next 35 copy_curr = copy_curr.next 36 end 37 38 copy_head 39end

Ruby Solution 2

1def copyRandomList(head) 2 copy_head = Marshal.load(Marshal.dump(head)) 3end