【LeetCode】面试题35. 复杂链表的复制
解题方法:建立HashMap<>
class Solution {
public Node copyRandomList(Node head) {
if(head == null) return null;
Node newHead = new Node(head.val);//建立我们新链表的头
Node tmp = newHead;
HashMap<Node, Node> map = new HashMap<>();//建立哈希表
map.put(head, tmp);
while(head.next != null){//如果原来链表的下一个不为null
head = head.next;
tmp.next = new Node(head.val);//复制下一个
tmp = tmp.next;
map.put(head, tmp);//放入哈希表
}
tmp.next = null;
//至此建立了包括val和next的链表。
for(Node key : map.keySet()){
map.get(key).random = map.get(key.random);//新链表的每一个结点指向匹配的旧结点指向的旧结点的匹配新结点
}
return newHead;
}
}