138. Copy List with Random Pointer

来源:互联网 发布:nat123访问数据库很慢 编辑:程序博客网 时间:2024/06/06 19:09

这道题给出一个链表,链表每一个节点都有一个指针,指向链表中的任意一个节点或者null,要求复制这个链表。

每次复制一个节点,肯定要填上random指针,但是random指针怎么才能知道呢,如果在链表里一个一个找那肯定是不可能。为了不用一个一个的比较所有节点的label这样搜索,可以把原链表的每个节点到新链表里的相应节点的映射写在一个哈希表里,就不用搜索了。

所以这个题首先根据next指针把链表串起来,然后再遍历原链表,根据哈希表里的对应关系,把新链表的random指针都连好。

/** * Definition for singly-linked list with a random pointer. * struct RandomListNode { *     int label; *     RandomListNode *next, *random; *     RandomListNode(int x) : label(x), next(NULL), random(NULL) {} * }; */class Solution {public:    RandomListNode *copyRandomList(RandomListNode *head) {        if(!head)   return NULL;        RandomListNode* res = new RandomListNode(head->label);        RandomListNode* node = res;        RandomListNode* cur = head->next;        unordered_map<RandomListNode*, RandomListNode*> m;        m[head] = res;        while(cur){            RandomListNode* tmp = new RandomListNode(cur->label);            node->next = tmp;            m[cur] = tmp;            node = node->next;            cur = cur->next;        }        node = res;        cur = head;        while(node){            node->random = m[cur->random];            node = node->next;            cur = cur->next;        }        return res;    }};


原创粉丝点击