class Node {
int? val;
Node? next;
Node? random;
Node(val, next);
}
Node? copyRandomList(Node? head) {
if (head == null) {
return head;
}
Node? p = head;
while (p != null) {
Node? newNode = Node(p.val, p.next);
p.next = newNode;
p = newNode.next;
}
p = head;
while (p != null && p.next != null) {
p.next?.random = p.random?.next;
p = p.next?.next;
}
p = head;
Node? dummy = Node(0, null);
Node? pDummy = dummy;
while (p != null) {
Node? temp = p.next;
p.next = temp?.next;
pDummy?.next = temp;
temp?.next = null;
pDummy = temp;
p = p.next;
}
return dummy.next;
}