/**
* Definition for a Node.
* struct Node {
* int val;
* struct Node *next;
* struct Node *random;
* };
*/
typedef struct Node Node;
struct Node* copyRandomList(struct Node* head) {
if(head==NULL)
return NULL;
//1.拷贝结点,连接到原结点的后面
Node*cur=head;
while(cur){
Node*copy=(Node*)malloc(sizeof(Node));
copy->next=NULL;
copy->random=NULL;
copy->val=cur->val;
// //相当于插入
// copy->next=cur->next;
// cur->next=copy;
Node*next=cur->next;
cur->next=copy;
copy->next=next;
cur=next;
}
//2.处理拷贝结点的random
cur=head;
while(cur){
Node*copy=cur->next;
if(cur->random)
copy->random=cur->random->next;
else
copy->random=NULL;
cur=cur->next->next;
}
//3.拆
cur=head;
Node*copyHead=head->next;//因为函数最后返回的是头指针
while(cur){
Node*copy=cur->next;
Node*next=cur->next->next;
cur->next=next;
if(next)
copy->next=next->next;
else
copy->next=NULL;
cur=next;
}
return copyHead;
}
【数据结构】【链表代码】随机链表的复制
最新推荐文章于 2024-10-07 14:53:51 发布