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

力扣-138.随机链表的复制

题目描述

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

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

class Solution {
public:Node *copyRandomList(Node *head) {if (head == NULL) {return head;}//复制各节点,并构建拼接链表,形如7->7->3->3->...Node *cur = head;while (cur) {Node *tmp = new Node(cur->val);tmp->next = cur->next;cur->next = tmp;cur = cur->next->next;}//构建各新节点的 random 指向cur = head;while (cur) {if (cur->random != NULL)//条件不要忘记cur->next->random = cur->random->next;//这行理解了关键逻辑就理解了cur = cur->next->next;}//拆分两链表cur = head->next;Node *pre = head;Node *res = cur;while (cur->next) {pre->next = cur->next;cur->next = cur->next->next;pre = pre->next;cur = cur->next;}pre->next = nullptr; // 单独处理原链表尾节点,因为不能修改原链表,否则报错return res;}
};

小结:没做过基本想不到这么巧妙的方法,只能寄希望于下次刷到可以顺利做出来,也是看了题解才勉强完成。主要思路是拼接+拆分,需要注意的点都写在注释里,还有一种哈希表解法没有看,从现在开始想用Java同步二刷hot100,我会新建一个专栏,欢迎关注阅读。

相关文章:

  • Aware和InitializingBean接口以及@Autowired注解失效分析
  • linux-驱动开发之设备树详解(RK平台为例)
  • 《Python星球日记》 第58天:Transformer 与 BERT
  • 快解析为TPDDNS用户提供免费替换服务
  • 2025年SDK游戏盾技术深度解析:AI赋能下的DDoS/CC攻击防御革命
  • 《Effective Python》第1章 Pythonic 思维详解——深入理解流程控制中的解构利器match
  • Baumer工业相机堡盟工业相机在使用光源时如何选择蓝光还是红光
  • Lynx-字节跳动跨平台框架多端兼容Android, iOS, Web 原生渲染
  • 力扣210(拓扑排序)
  • VLM-RL:用于安全自动驾驶的统一视觉语言模型和强化学习框架——论文阅读
  • 互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-3
  • DVWA在线靶场-xss部分
  • DeepSeek-R1-Distill-Qwen-1.5B代表什么含义?
  • 26考研|数学分析:函数列与函数项级数
  • 对接马来西亚股票数据API接口文档
  • 如何使用Selenium?
  • Linux操作系统从入门到实战(六)Linux开发工具(上)详细介绍什么是软件包管理器,Linux下如何进行软件和软件包的安装、升级与卸载
  • 前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
  • C++ 状态模式详解
  • React Native踩坑实录:解决NativeBase Radio组件在Android上的兼容性问题
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持
  • 海北州委常委、常务副州长桑本履新青海省供销社理事会主任
  • 中美大幅下调超100%关税,印巴四日“战争”复盘|907编辑部
  • 电影路演,虚幻狂欢?
  • “80后”李灿已任重庆市南川区领导,此前获公示拟提名为副区长人选
  • 大四本科生已发14篇SCI论文?重庆大学:成立工作组核实