138. 复制带随机指针的链表 - 力扣(LeetCode)
思路:
1.拷贝节点链接到源节点的后面
2.设置拷贝节点的random
if(cur->random) copy->random = cur->random->next;
3.拷贝节点解下来,链接组成拷贝链表
代码实现:
/**
* 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* next = cur->next;
struct Node* copy = (struct Node*)malloc(sizeof(struct Node));
copy->val = cur->val;
//输入链接
cur->next = copy;
copy->next = next;
cur = next;
}
//2.置random
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;
}
//3.解下来链接在一起
cur = head;
struct Node* copyHead = NULL,*copyTail = NULL;
while(cur)
{
struct Node* copy = cur->next;
struct Node* next = copy->next;
cur->next = next;
//尾插
if(copyTail==NULL)
{
copyHead = copyTail = copy;
}
else
{
copyTail->next=copy;
copyTail = copyTail->next;
}
cur = next;
}
return copyHead;
}