首页 > 其他分享 >2023/3/4[LC:Random_List_Copy]

2023/3/4[LC:Random_List_Copy]

时间:2023-04-18 22:23:07浏览次数:39  
标签:Node map head random nullptr Random List next Copy

2023/3/4[LC:Random_List_Copy]

img

1>心得:

  • 写“for"循环之前需要首先思考循环目的结束条件;例如链表的遍历等;
  • 模拟仔细;

2>思路

首先如果是单纯复制一个普通链表:

img需要给前一个copy结点留一个pre指针;以便:pre->next=copy;

3>解法

此题有两个解法

问题的关键在于如何解决指向与当前结点相距不定的”复杂节点“;(如果是正常链表可以留一个pre指针)

解法一:通过HashMap记录对应新旧结点关系

/*
// 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* copy_random_list(Node* head){
        if(!head) return nullptr;
        map<Node*,Node*> map;
        for(Node* p=head;p;p=p->next){
            map.put(p,new Node(p->val));
        }
/*关键for循环*/
        for(Node* q=head;q;q=q->next){
            map.find(q)->second->next=map.get(q->next)->second;
            map.get(q)->second->random=map.get(q->random)->second;
        }
        return map.get(head)->second;
    }
}

解法二:原地重复链表记录新旧关系

img

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if(!head){
            return nullptr;
        }
        for(Node* p=head;p!=nullptr;p=p->next->next){
            Node* new_p=new Node(p->val);
            new_p->next=p->next;
            p->next=new_p;
        }
/*关键for循环*/
        for(Node* p=head;p!=nullptr;p=p->next->next){
            if(p->random){
                p->next->random=p->random->next;//保证是复制的random结点
            }
        }
        Node* ans =head->next;
        Node* q=head;
        Node* r=head->next;
/*q直到null才停,r一次跳两步最后一步会r->null->next报错*/
        for(;r&&r->next&&q;r=r->next,q=q->next){
            q->next=q->next->next;
            r->next=r->next->next;
        }
        q->next=nullptr;
        r->next=nullptr;
        return ans;
    }
};

标签:Node,map,head,random,nullptr,Random,List,next,Copy
From: https://www.cnblogs.com/LogicHan/p/17331415.html

相关文章

  • python csv.reader 读取文件或list
    读取文件withopen(file_path,encoding='UTF-8')asfile:lines=csv.reader(file,delimiter="#",quotechar='"')forrowinlines:print(row)读取list注意:如果是字符串,一定要转成list.例如 rows=csv.reader(["John#......
  • Vue中 $attrs、$listeners 详解及使用
    传送门:Vue中子组件向父组件传值及.sync修饰符详解传送门:Vue中状态管理器(vuex)详解及应用场景传送门:Vue中事件总线(eventBus)详解及使用传送门:Vue中provide、inject详解及使用Vue中常见的组件通信方式可分为三类父子通信父向子传递数据是通过props,子向父是通过events($emit);......
  • 好物分享:一款可以加密云盘视频,并依然可在线播放的免费小工具——Alist 云盘视频加密助
    在当前娱乐资源丰富的时代,人们每天都在接触各种视频资源。然而,网盘限速、版权审核、视频分级、少儿不宜等问题经常让人感到困扰。如何在保护隐私的前提下,让视频存储和分享变得更加便捷、安全呢?分享一款实用的免费小工具——Alist云盘视频加密助手v1.1(完全免费的哟),懂的都懂!拿走不......
  • Java:ArrayList初始化赋值
    测试环境$java-versionjavaversion"1.8.0_251"Java(TM)SERuntimeEnvironment(build1.8.0_251-b08)JavaHotSpot(TM)64-BitServerVM(build25.251-b08,mixedmode)方式一:常规方式List<Integer>list=newArrayList<>();list.add(1);list......
  • invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法
    nvalidcomparison:java.util.ArrayListandjava.lang.String异常解决方法异常原因首先我们可以确定是在mybatis的xml中的list操作出现错误然后发现在接收list的时候加了判断list!=’’,导致list(数组集合类型)和空字符串(字符串类型)进行比较,故报错解决办法,对于list类型进......
  • Linux iwlist command All In One
    LinuxiwlistcommandAllInOnewifiscaniwlist#scanningforwirelessnetworks$sudoiwlistwlan0scan$sudoiwlistwlan0scan>wifi-scan.md$cat./wifi-scan.md|grepESSID$iwconfig#Linux/macOS$ifconfig#Windows$ipconfig#......
  • 【C#】Random生成随机数重复的问题
    ///<summary>///根据中位数返回区间随机数///</summary>///<paramname="mid"></param>///<returns></returns>privatestaticintGetRandom(intmid){//1.//Randomran=new......
  • 30th@list@20230417
    >20230417NumChenyu_spider.py>带数字成语抓取 >20230417HanNum_count.py>文本汉字字数统计  HanDifChar_count.py>文本汉字相异字统计  HanPrimePosition_list.py>文本质数位汉字列表               ......
  • 03-List、Set、数据结构、Collections
    03-List、Set、Collections、Map1.List集合在Java中,List是一种常用的集合类型,用于存储一组有序的元素,并允许包含重复元素。List接口继承自Collection接口,并且提供了许多有用的方法来操作集合中的元素。概述List是一种有序的集合,它允许元素按照插入的顺序进行存储,并且......
  • 如何将list转为tensor
    如何将list转为tensor在遇到需要将list转换为tensor的情况时,往往不能直接转换,而是需要借助torch.cat方法进行。为防止需要的时候找不到教程,本文给出示例进行该操作。操作方法问题给定对于数据x和y。x的形状为(2,3,4),表示batch_size为2,每个batch有3个向量,每个向......