返回链表的深度拷贝

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

posted @ 2020-08-12 11:52  卡冈图雅blackhole  阅读(149)  评论(0编辑  收藏  举报