题目
请实现 copyRandomList
函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next
指针指向下一个节点,还有一个 random
指针指向链表中的任意节点或者 null
。
解题思路
采用复制和拆分的方法
A->B->C->D
- A->A1->B->B1->C->C1->D->D1
- cur.next.random=cur.random.next
- A->B->C->D
A1->B1->C1->D1
代码
/*
// Definition for a Node.
class Node {
int val;
Node next;
Node random;
public Node(int val) {
this.val = val;
this.next = null;
this.random = null;
}
}
*/
class Solution {
public Node copyRandomList(Node head) {
if(head==null){
return null;
}
//复制节点
Node cur=head;
while(cur!=null){
Node next=cur.next;
cur.next=new Node(cur.val);
cur.next.next=next;
cur=next;
}
//复制随机节点
cur=head;
while(cur!=null){
Node curNew=cur.next;
curNew.random=cur.random==null?null:cur.random.next;
cur=cur.next.next;
}
//拆分
Node headNew=head.next;
cur=head;
Node curNew=head.next;
while(cur!=null){
cur.next=cur.next.next;
cur=cur.next;
curNew.next=cur==null?null:cur.next;
curNew=curNew.next;
}
return headNew;
}
}