给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。
class Node {
public int val;
public Node next;
public Node random;
public Node() {}
public Node(int _val,Node _next,Node _random) {
val = _val;
next = _next;
random = _random;
}
};
*/
class Solution {
public Node copyRandomList(Node head) {
if (head == null) {
return null;
}
//串起来
Node cur = head;
while (cur != null) {
Node node = new Node(cur.data,cur.next,null);
Node tmp = cur.next;
cur.next = node;
cur = tmp;
}
//遍历
cur = head;
while (cur != null) {
if (cur.random != null) {
cur.next.random = cur.random.next;
}else {
cur.next.random = null;
}
cur = cur.next.next;
}
//拆分链表
cur = head;
Node newHead = cur.next;
while (cur.next != null) {
Node tmp = cur.next;
cur.next = tmp.next;
cur = tmp;
}
return newHead;
}