【数据结构和算法】面试必刷之随机链表复制:这三步让你彻底吃透 random 指针

【数据结构和算法】面试必刷之随机链表复制:这三步让你彻底吃透 random 指针
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

随机链表的复制是数据结构中的经典难题,核心难点在于复制节点的random指针——其指向的节点可能尚未创建,也可能指向链表中的任意节点。本文采用“原地拷贝+拆分”的最优思路,分三步拆解解题逻辑,结合代码实现与原理分析,清晰讲解如何高效解决该问题,帮助读者吃透random指针的处理技巧,掌握链表操作的核心思维。

一、随即链表的复制

1.1 题目

链接:随机链表的复制

在这里插入图片描述


在这里插入图片描述

1.2 算法原理

第一步:依次拷贝每个节点放在原节点后面

在这里插入图片描述


第二步:处理random指针指向 — 新链表 == (旧链表)random->next

第三步:把拷贝节点依次取下来尾插成新链表

1.3 代码

*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;*};*/ typedef struct Node* Node; struct Node*copyRandomList(struct Node* head){//拷贝每个节点放在原节点后面 Node cur = head;while(cur){ Node copy =(Node)malloc(sizeof(struct Node)); copy->val = cur->val; copy->next = cur->next; cur->next = copy; cur = copy->next;}//处理拷贝链表的random cur = head;while(cur){ Node copy = cur->next;if(cur->random ==NULL) copy->random =NULL;else copy->random = cur->random->next; cur = copy->next;}//把拷贝链表从原链表摘下来成为新链表 cur = head; Node copyhead =NULL; Node copytail =NULL;while(cur){ Node copy = cur->next; Node next = copy->next;//没有节点 + 有一个节点 if(copytail ==NULL) copyhead = copytail = copy;else{ copytail->next = copy; copytail = copytail->next;} cur = next;}return copyhead;}

总结与每日励志

✨本文详细讲解了随机链表复制的完整解法,核心是通过“原地拷贝节点、关联random指针、拆分链表”三步,在O(n)时间复杂度和O(1)空间复杂度内完成复制,避开了random指针带来的难点。每一道算法题都是思维的锤炼,每一次代码调试都是能力的提升。愿你在技术学习的道路上,保持严谨与耐心,不畏惧难题,不敷衍细节,永远相信美好的事情即将发生,用坚持与积累,解锁更多算法奥秘,奔赴属于自己的成长之路

在这里插入图片描述

Read more

免费且完全开源的金融平台,金融数据集软件openbb

免费且完全开源的金融平台,金融数据集软件openbb

首个免费且完全开源的金融平台 repo:https://github.com/OpenBB-finance/OpenBB 手册:https://docs.openbb.co/odp/python/quickstart agent:https://github.com/OpenBB-finance/agents-for-openbb 提供股票、期权、加密货币、外汇、宏观经济、固定收益等多种金融工具的访问权限,并提供广泛的扩展功能,以满足用户的不同需求。 注册 OpenBB Hub,充分利用 OpenBB 生态系统。 还开源了一个可以访问 OpenBB 中所有数据的 AI 金融分析师代理,该存储库可以在此找到这里。 1. 安装 OpenBB 平台可以通过运行 pip install openbb 作为 PyPI

By Ne0inhk
π0的微调——如何基于各种开源数据集、以及私有数据集微调openpi(含我司七月的微调实践及openpi在国产臂上的部署)

π0的微调——如何基于各种开源数据集、以及私有数据集微调openpi(含我司七月的微调实践及openpi在国产臂上的部署)

前言 25年2.4日,几个月前推出π0的公司Physical Intelligence (π)宣布正式开源π0及π0-FAST,如之前所介绍的,他们对用超过 10,000 小时的机器人数据进行了预训练 该GitHub代码仓库「 π0及π0-FAST的GitHub地址:github.com/Physical-Intelligence/openpi」包括4个方面:简言之,就是 1. π0本身的代码和权重 2. 特定平台上特定任务的微调checkpoint 3. 推理代码 4. 微调代码 注意本文接上一篇文章《π0源码剖析——从π0模型架构的实现(如何基于PaLI-Gemma和扩散策略去噪生成动作),到基于C/S架构下的模型训练与部署》而来,但本文侧重对π0的微调 至于什么是π0,则参见此文《π0——用于通用机器人控制的VLA模型:一套框架控制7种机械臂(基于PaliGemma和流匹配的3B模型)》 顺带,值得一提的是,我司「七月在线」也是目前国内具身落地经验最丰富的团队之一了 * 比如每个月都在并行开发多个具身订单,全职开发者和合作开发者总计百余人,

By Ne0inhk
Git 用户名与邮箱配置指南

Git 用户名与邮箱配置指南

前言 在使用 Git 进行版本控制时,每一次代码提交(commit)都会记录提交者的身份信息。这些信息不仅用于追踪代码变更历史,还在团队协作、代码审查和开源贡献中发挥着重要作用。 Git 通过 用户名(user.name) 和 邮箱(user.email) 来标识开发者身份。正确配置这两项信息,是使用 Git 的第一步,也是确保提交记录清晰、可追溯的关键。 一、为什么需要设置用户名和邮箱? Git 是一个分布式版本控制系统,它不依赖中央服务器来管理用户身份。因此,每个开发者必须在本地明确声明自己的身份。Git 会在每次执行 git commit 时,自动将 user.name 和 user.email 写入提交记录。 如果没有正确设置,可能会导致: * 提交记录显示为 unknown 或默认系统用户名;

By Ne0inhk
MiniMax AI 开源 MiniMax-M2.1

MiniMax AI 开源 MiniMax-M2.1

遇见MiniMax-M2.1 今天我们正式将MiniMax-M2.1交付给开源社区。这次发布不仅是参数的更新,更是向普及顶级智能体能力迈出的重要一步。 M2.1的诞生旨在打破高性能智能体必须闭门造车的刻板印象。我们专门优化了模型在编码、工具使用、指令遵循和长远规划方面的稳健性。从自动化多语言软件开发到执行复杂的多步骤办公流程,MiniMax-M2.1让开发者能够构建新一代自主应用程序——同时保持完全透明、可控且易于获取。 我们相信真正的智能应该触手可及。M2.1是我们对未来的承诺,也是您手中的强大新工具。 使用方法 * MiniMax-M2.1 API 现已在 MiniMax 开放平台上线:https://platform.minimax.io/docs/guides/text-generation * 基于 MiniMax-M2.1 构建的产品 MiniMax Agent 现已公开可用:https://agent.minimax.io/ * MiniMax-M2.1 模型权重现已开源,支持本地部署和使用:https:

By Ne0inhk