这一题的解法,那个DNA的复制差不多,就是利用类似螺旋复制的一个样子然后我们再把链给他取出来就行了
typedef struct Node Node;
Node* copyRandomList(Node* head) {
if (head == NULL) {
return NULL;
}
Node* cur = head;
while (cur) {
Node* copy = (Node*)malloc(sizeof(Node));
copy->val = cur->val;
copy->next = cur->next;
cur->next = copy;
cur = copy->next;
}
cur = head;
while (cur) {
Node* copy = cur->next;
if (cur->random == NULL) {
copy->random=NULL;
}
else
{
copy->random = cur->random->next;
}
cur = copy->next;
}
cur = head;
Node* newhead = NULL;
Node* newTail = NULL;
Node* copy = NULL;
while (cur) {
copy = cur->next;
cur->next = copy->next;
if (newTail == NULL)
{
newhead = newTail = copy;
}
else {
newTail->next = copy;
newTail = newTail->next;
}
cur = cur->next;
}
return newhead;
}
第一部分空间,就是把他的复制后的样子给他创建出来,然后第二部分的样子就是处理一下他的这个随机值。然后随机这里有个点,就是它随机值指向的不能是他原本的那个。那个地方是得要是他复制过的,然后第三部分就是。第三部分就是我们把它取出来,这里我们把它取出来之后呢,这里我们没有哨兵位,所以我们直接从头开始尾插,然后我们这里面是没有把它还原的,可以还原一下