zoukankan      html  css  js  c++  java
  • 138. 复制带随机指针的链表 力扣(中等) 哈希+链表

    题目描述:

    给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。

    构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

    例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random --> y 。

    返回复制链表的头节点。

    用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:

    val:一个表示 Node.val 的整数。
    random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为  null 。
    你的代码 只 接受原链表的头节点 head 作为传入参数。

    示例 1:

     

    输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
    输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]

    题源:https://leetcode-cn.com/problems/copy-list-with-random-pointer/

    题解: 就是完全复制一个一模一样的链表,但是和原来的链表没有节点重复

    需要学习的就是对链表节点指针的理解:

    • Node(val)           创建的是一个节点,不是指针;
    • new Node(val)     是一个指向这个节点的指针

    代码:

    /*
    // Definition for a Node.
    class Node {
    public:
        int val;
        Node* next;
        Node* random;
        
        Node(int _val) {
            val = _val;
            next = NULL;
            random = NULL;
        }
    };
    */
    
    class Solution {
    public:
        Node* copyRandomList(Node* head) {
        
        if(head==NULL)  return NULL;
    
        map<Node*,Node*> mp;
        Node* head2= new Node(head->val);  // Node* head2=Node(head->val) 错误
        Node* cur1=head;
        Node* cur2=head2;
        
        while(cur1!=NULL)
        {
            mp[cur1]=cur2;   //  构建映射,也就是hash
            if(cur1->next==NULL) break;
            cur2->next=new Node(cur1->next->val);  // 需要 new在前面
            cur1=cur1->next;
            cur2=cur2->next;
        }
        cur1=head;
        cur2=head2;
        while(cur1!=NULL)
        {
            if(cur1->random==NULL) cur2->random = NULL;
                else cur2->random=mp[cur1->random];
            cur1=cur1->next;
            cur2=cur2->next;
        }
        return head2;
        }
    };

    今天的力扣崩了,一直出现内部错误。。。

  • 相关阅读:
    python 并发编程 多线程 event
    python 并发编程 多线程 定时器
    python 并发编程 多线程 信号量
    linux top 查看CPU命令
    python 并发编程 多线程 GIL与多线程
    python 并发编程 多线程 死锁现象与递归锁
    python 并发编程 多线程 GIL与Lock
    python GIL全局解释器锁与互斥锁 目录
    python 并发编程 多线程 GIL全局解释器锁基本概念
    执行python程序 出现三部曲
  • 原文地址:https://www.cnblogs.com/stepping/p/15046452.html
Copyright © 2011-2022 走看看