1. 程式人生 > >138 Copy List with Random Pointer

138 Copy List with Random Pointer

div fin put sin logs con 難點 spa rand

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.

copy 的題多用hashmap, 難點在於如何讓遍歷, 如何構建新的節點間的關系.

/**
 * Definition for singly-linked list with a random pointer.
 * class RandomListNode {
 *     int label;
 *     RandomListNode next, random;
 *     RandomListNode(int x) { this.label = x; }
 * };
 */
public class Solution {
   public RandomListNode copyRandomList(RandomListNode head) {
        // write your code here
        HashMap<RandomListNode, RandomListNode> map = new HashMap<RandomListNode, RandomListNode>();
        RandomListNode cur = head;
        while (cur != null) {
            RandomListNode copy = new RandomListNode(cur.label);
            map.put(cur, copy);
            cur = cur.next;
        }
        cur = head;
        while (cur != null) {
            map.get(cur).next = map.get(cur.next);
            map.get(cur).random = map.get(cur.random);
            cur = cur.next;
        }
        return map.get(head);
   }

}

  

138 Copy List with Random Pointer