当前位置: 首页 > article >正文

C++速通LeetCode中等第20题-随机链表的复制(三步简单图解)

 

 方法图解:

class Solution {
public:
    Node* copyRandomList(Node* head) {
        if ( !head ) {
            return nullptr;
        }
        Node *cur = head;
        // 1. 在原节点的每个节点后创建一个节点
        while ( cur ) {
            Node *newNode = new Node(cur -> val);
            newNode -> next = cur -> next;
            cur -> next = newNode;
            cur = cur -> next ->next;
        }

        // 2. 更新新节点的random指针
        cur = head;
        while ( cur ) {
            if ( cur -> random == nullptr ) {
                cur -> next -> random = nullptr;
            } else {
                cur -> next -> random = cur -> random -> next;
            }
            cur = cur -> next -> next;
        }

        // 3. 将两个链表拆开
        Node *dummy = new Node(-1);
        Node *curnew = dummy, *curold = head;
        while ( curold ) {
            curnew -> next = curold -> next;
            curnew = curnew -> next;
            curold->next = curnew->next;
            curold = curold -> next;
        }
        return dummy -> next;
    }
};


http://www.kler.cn/a/320719.html

相关文章:

  • 1 设计模式原则之开闭原则
  • 动态规划之股票系列
  • 论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法
  • Redis性能优化——针对实习面试
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,
  • 职场汇报技巧:选择合适的汇报形式与提供数据依据
  • 优化算法(四)—蚁群算法(附MATLAB程序)
  • spark的stage划分的原理
  • 如何完成一个每天自定义的主题,然后提出该主题的100个问题,然后自动完成。使用playwright
  • Chroma 向量数据入门
  • zico2打靶记录
  • 结合人工智能,大数据,物联网等主流技术实现业务流程的闭环整合的名厨亮灶开源了
  • Ubuntu上安装Git:简单步骤指南
  • vue3:路由守卫(全局守卫、路由独享守卫、组件内守卫)
  • XML:DOM4j解析XML
  • Swoole 高性能高并发 PHP 协程框架
  • 【手机马达共振导致后主摄马达声音异常】
  • 深入理解华为仓颉语言的数值类型
  • IP地址的打卡路径是什么?
  • 滚雪球学SpringCloud[10.2讲]:微服务项目的性能优化与调优
  • shell脚本(9.20)
  • MATLAB在无线通信系统部署与维护中的应用
  • [M二分答案] lc3296. 移山所需的最少秒数(二分答案+周赛416_2+好题)
  • 二进制文件与文本文件的区别【字符集Charset】
  • 安卓13设置动态修改设置显示版本号 版本号增加信息显示 android13增加序列号
  • 23个Python在自然语言处理中的应用实例