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
  • 相关阅读:
    Linux系统中的load average
    通过数据库评估存储设备IO性能-Oracle11gIO校准功能介绍
    ORACLE查询字段中含有空格的数据
    JavaScript&Typescript中的时间
    LeetCode
    LeetCode
    面试问题及知识汇总
    Bootstrap布局容器与栅格系统
    JVM垃圾回收(GC)
    9. 专题
  • 原文地址:https://www.cnblogs.com/zengzy/p/5042380.html
Copyright © 2011-2022 走看看