题目
请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。
解答
class Solution {
public:
Node* copyRandomList(Node* head) {
if(head == NULL)
return NULL;
Node* p=head;
while(p!=NULL){ //复制val
Node* copy=new Node(p->val);
copy->next=p->next;
p->next=copy;
p=copy->next;
}
p=head;
while(p!=NULL){//复制random
if(p->random==NULL)
p->next->random=NULL;
else{
p->next->random=p->random->next;
}
p=p->next->next;
}
p=head;
Node* ans=new Node(0);
Node* q=ans;
while(p!=NULL){//拆分
q->next=p->next;
p->next=p->next->next;
p=p->next;
q=q->next;
}
return ans->next;
}
};
感受
需要注意的是不能在最后的拆分链表时把head给破坏掉,不然会显示错误“Next pointer of node with label 7 from the original list was modified”