🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
思路:
在这个题目当中,我们可以选择将拷贝链表放在原先链表的后面,然后就可以把拷贝链表和原先链表建立起来联系,从而解题。
代码部分
/**
* Definition for a Node.
* struct Node {
* int val;
* struct Node *next;
* struct Node *random;
* };
*/
struct Node* copyRandomList(struct Node* head)
{
//创建拷贝节点使其位于源节点的后面
struct Node*cur=head;
while(cur)
{
struct Node*copy=(struct Node*)malloc(sizeof(struct Node));
copy->val=cur->val;
copy->next=cur->next;
cur->next=copy;
cur=cur->next->next;
}
//进行连接
cur=head;
while(cur)
{
struct Node*copy=cur->next;
if(cur->random==NULL)
{
copy->random=NULL;
}
else
{
copy->random=cur->random->next;
}
cur=cur->next->next;
}
struct Node*copyhead = NULL;
struct Node*tail = NULL;
cur=head;
while(cur)
{
struct Node*copy=cur->next;
struct Node*next=copy->next;
if(tail==NULL)
{
copyhead=tail=copy;
}
else
{
tail->next=copy;
tail=tail->next;
}
cur->next=next;
cur=next;
}
return copyhead;
}