package com.heu.wsq.leetcode.inoffer;
import java.util.HashMap;
import java.util.Map;
/**
* 剑指 Offer 35. 复杂链表的复制
* @author wsq
* @date 2021/1/23
* 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
* 示例 1:
*
* 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
* 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
*
* 链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/9p0yy1/
*/
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
public class Offer35 {
public Node copyRandomList(Node head) {
Node root = null;
Node q = head;
Map<Node, Node> map = new HashMap<>();
while(q != null){
if(!map.containsKey(q)){
map.put(q, new Node(q.val));
}
Node tmp = map.get(q);
if(q.next != null){
if(!map.containsKey(q.next)){
map.put(q.next, new Node(q.next.val));
}
tmp.next = map.get(q.next);
}
if(q.random != null){
if(!map.containsKey(q.random)){
map.put(q.random, new Node(q.random.val));
}
tmp.random = map.get(q.random);
}
if(root == null){
root = tmp;
}
q = q.next;
}
return root;
}
}
剑指 Offer 35. 复杂链表的复制
最新推荐文章于 2023-09-16 11:42:15 发布