JZ25 复杂链表的复制

JZ25 复杂链表的复制

题目描述

点这里

思路分析

链表模拟+哈希表
没有的节点hash创建出来。

代码实现

/*
struct RandomListNode {
    int label;
    struct RandomListNode *next, *random;
    RandomListNode(int x) :
            label(x), next(NULL), random(NULL) {
    }
};
*/
class Solution {
public:
    RandomListNode* Clone(RandomListNode* head) {
        unordered_map<RandomListNode*, RandomListNode*> hash;
        hash[nullptr] = nullptr;
        auto dummy = new RandomListNode(-1), tail = dummy;

        while(head)
        {
            if(!hash.count(head)) hash[head] = new RandomListNode(head->label);
            if(!hash.count(head->random)) hash[head->random] = new RandomListNode(head->random->label);

            tail->next = hash[head];
            tail->next->random = hash[head->random];

            tail = tail->next;
            head = head->next;
        }

        return dummy->next;
    }
};
上一篇:剑指offer_复杂链表的复制(C++_三种方法_时间O(N^2)空间O(1)_复杂问题的拆分 / 时间O(N)空间(N)_哈希表_图解映射 / 时间O(N)空间(1)_链表拆分)


下一篇:JZ25复杂链表的复制