zoukankan      html  css  js  c++  java
  • [Linked List]Copy List with Random Pointer

    Total Accepted: 53943 Total Submissions: 209664 Difficulty: Hard

    A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

    Return a deep copy of the list.

     
    o(n)空间复杂度,代码比价简单。网上还流传一种o(1)空间复杂度的解法,大致的过程就是先拷贝next结点,再连接随机结点,最后分离链表。
     
    /**
     * 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) {
            unordered_map<RandomListNode*,RandomListNode*> umap;
            RandomListNode* newHead  = NULL;
            RandomListNode* cur      = head;
            RandomListNode* node_pre = NULL;
            RandomListNode* node     = NULL;
            while(cur){
                node      = new RandomListNode(cur->label);
                umap[cur] = node;
                cur == head ? newHead = node :node_pre->next = node;
                node_pre  = node;
                cur       = cur->next;
            }
            cur = head;
            while(cur){
                umap[cur]->random = cur->random ? umap[cur->random] : NULL;
                cur               = cur->next;
            }
            return newHead;
        }
    };
    Next challenges: (M) Clone Graph
  • 相关阅读:
    Python-手动安装第三方包
    SQL SERVER-根据jobID查job
    python-包模块等概念
    锁表
    Python-try异常捕获
    胶水语言
    C++之多态性与虚函数
    android
    开源许可协议
    hal
  • 原文地址:https://www.cnblogs.com/zengzy/p/5042380.html
Copyright © 2011-2022 走看看