138. 随机链表的复制 138.复制带随机指针的链表
138. 随机链表的复制 138.复制带随机指针的链表
0:45:56
var copyRandomList = function(head) {
if(!head) return null;
//创建两个指针,一个指向头节点
let p=head,q;
//遍历整个链表,复制每个节点,并将值全部复制成一样的,然后拼接到原节点的后面;
while(p){
q=new ListNode(p.val);
q.next=p.next;
q.random=p.random;
p.next=q;
p=q.next;
}
//找到一个克隆节点,然后进行修正random.将克隆节点的random指向克隆节点
p=head.next;
while(p){
p.random && (p.random=p.random.next);
(p=p.next) && (p=p.next);
// if(p.next) p=p.next.next;
}
//拆分链表,分成原节点链表和克隆节点链表:
p=q=head.next;
while(q.next){
head.next=head.next.next;
q.next=q.next.next;
head=head.next;
q=q.next;
}
head.next=null;
//返回我们的克隆节点链表
return p;
};

浙公网安备 33010602011771号