package leetcode;
public class demo_138 {
public Node copyRandomList(Node head) {
//如果原链表为空链表直接返回
if(head==null) {return null;}
Node otemp=head;
//在每个节点之后复制一个相同的节点
while(otemp!=null) {
Node t=new Node(otemp.val);
if(otemp.next!=null) {
t.next=otemp.next;
}
//每个节点后插入一个相同的节点
otemp.next=t;
otemp=otemp.next.next;
}
//复制随机指针
otemp=head;
while(otemp!=null) {
if(otemp.random!=null) {
otemp.next.random=otemp.random.next;
}
otemp=otemp.next.next;
}
//创建一个新的头结点
Node node=head.next;
Node temp=null;
otemp=head;
//将原链中断开为两个相同的链表
while(otemp!=null&&otemp.next!=null) {
temp=otemp.next;
otemp.next=temp.next;
otemp=temp;
}
return node;
}
}