返回链表的深度拷贝
struct Node { int val; Node* next; Node* random; Node(int x, Node* pt1, Node* pt2) :val(x), next(pt1), random(pt2) {} }; class Solution { public: Node* copyRandomList(Node* head) { if (head == nullptr) return head; Node* node = head; //复制 while (node != nullptr) { Node* copy = new Node(node->val, nullptr, nullptr); copy->next = node->next; node->next = copy; node = copy->next; } node = head; while (node != nullptr) { if (node != nullptr) { node->next->random = node->random->next; } node = node->next->next; } node = head; Node* newhead = node->next; Node* newnode = newhead; //分离 while (node->next != nullptr) { node->next = node->next->next; if (newnode->next != nullptr) { newnode->next = newnode->next->next; } node = node->next; newnode = newnode->next; } return newhead; } };
参考:https://blog.csdn.net/qq_44759710/article/details/102643632?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param