/*
// Definition for a Node.
class Node {
public:
int val;
Node* next;
Node* random;
Node(int _val) {
val = _val;
next = NULL;
random = NULL;
}
};
*/
class Solution {
public:
//这是一个申请节点的函数
Node* BuyNode(int val)
{
Node* newNode = (Node*)malloc(sizeof(Node));
if(newNode == NULL)
{
return NULL;
}
//给节点中的成员赋值
newNode->val = val;
newNode->next = NULL;
newNode->random = NULL;
return newNode;
}
Node* copyRandomList(Node* head) {
if(head ==NULL)
return NULL;
//一,先给所有的节点进行一次拷贝
Node* cur = head;
Node* newNode = NULL;
while(cur)
{
newNode = BuyNode(cur->val);
newNode->next = cur->next;
cur->next = newNode;
cur = newNode->next;
}
//二,将所有拷贝的节点进行赋值
cur = head;
while(cur)
{
newNode = cur->next;
if(cur->random)
newNode->random = cur->random->next;
cur = newNode->next;
}
//三,拆开新链表和原链表
Node* newhead = head->next;
cur = head;
while(cur->next)
{
newNode = cur->next;
cur->next = newNode->next;
cur = newNode;
}
return newhead;
}
};