"""
# Definition for a Node.
class Node:
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
self.val = int(x)
self.next = next
self.random = random
"""classSolution:defcopyRandomList(self, head:'Optional[Node]')->'Optional[Node]':ifnot head:return head
node_map =dict()
cur = head
while cur:
node_map[cur]= Node(cur.val)
cur = cur.next
cur = head
while cur:
node_map[cur].next= node_map[cur.next]if cur.nextelseNone
node_map[cur].random = node_map[cur.random]if cur.random elseNone
cur = cur.nextreturn node_map[head]
"""
# Definition for a Node.
class Node:
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
self.val = int(x)
self.next = next
self.random = random
"""classSolution:defcopyRandomList(self, head:'Optional[Node]')->'Optional[Node]':if head ==None:return head
cur = head
while cur !=None:
next_node = cur.next
new_node = Node(cur.val,None,None)
cur.next= new_node
new_node.next= next_node
cur = next_node
cur = head
while cur !=None:
cur.next.random =Noneif cur.random ==Noneelse cur.random.next
cur = cur.next.next
cur = head.nextwhile cur !=None:
next_node = cur.next
cur.next=Noneif next_node ==Noneelse next_node.next
cur = cur.nextreturn head.next
Java
classSolution{publicNodecopyRandomList(Node head){if(head ==null){returnnull;}Map<Node,Node> toRandomMap =newHashMap<>();Map<Node,Node> originToCopyMap =newHashMap<>();Node cur = head;while(cur !=null){if(cur.random !=null){
toRandomMap.put(cur, cur.random);}
originToCopyMap.put(cur,newNode(cur.val));
cur = cur.next;}
cur = head;while(cur !=null){Node next = cur.next ==null?null: originToCopyMap.get(cur.next);Node random = cur.random ==null?null: originToCopyMap.get(cur.random);
originToCopyMap.get(cur).next = next;
originToCopyMap.get(cur).random = random;
cur = cur.next;}return originToCopyMap.get(head);}}