leetcode-------链表Medium篇
①剑指 Offer 35. 复杂链表的复制
题目如下
。
注:该题解决思路通过参考大佬解法才懂!!!太牛了!!!
。
// An highlighted block
/*
// 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* copyRandomList(Node* head)
{
if(head == NULL)
return head;
Node *cur = head;
// 完成链表的复制
while(cur)
{
Node *p = new Node(cur->val);
p->next = cur->next;
cur->next = p;
cur = cur->next->next;
}
//完成链表中随机指针的复制
Node *curone = head;
while(curone)
{
if(curone->random) // 一定注意判断是否存在random指针,像例一head不存在结果就会出错
{
curone->next->random = curone->random->next;
}
curone = curone->next->next;
}
//完成两个完全复杂链表的分离
Node *newHead = head->next;
cur = head;
curone = head->next;
while(cur)
{
cur->next = cur->next->next;
cur = cur->next;
if(curone->next)
{
curone->next = curone->next->next;
curone = curone->next;
}
}
return newHead;
}
};