【数据结构和算法】面试必刷之随机链表复制:这三步让你彻底吃透 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

GitHub精选---Obsidian CEO 亲授!Obsidian-Skills:从入门到精通的最佳“实战”指南

GitHub精选---Obsidian CEO 亲授!Obsidian-Skills:从入门到精通的最佳“实战”指南

摘要:Obsidian 很强,但也很难上手?面对空白的笔记库不知所措?今天推荐的开源项目 Obsidian Skills,是由 Obsidian 现任 CEO Kepano (Steph Ango) 亲自打造的开源示范库。它不是一本枯燥的说明书,而是一个**“即开即用”的互动式教学 Vault**,让你在实操中掌握双链笔记的精髓。 🚀 前言:告别“工具焦虑” Obsidian 作为双链笔记的王者,以其强大的插件生态和本地化存储著称。但对于新手来说,下载安装后面对黑漆漆的界面,往往会有三个灵魂发问: 1. Markdown 语法怎么写才好看? 2. 双向链接(Wiki Links)到底怎么用? 3. 原本的文件夹分类还需要吗? 很多教程讲得天花乱坠,不如官方给你一个**“装修好的样板间”**来看看。Obsidian Skills 就是这样一个“样板间”。 🔍 什么是

By Ne0inhk
ClaudeCode武装三件套:Ghostty + Yazi + Lazygit 打造高效开发环境

ClaudeCode武装三件套:Ghostty + Yazi + Lazygit 打造高效开发环境

引言:多终端切换之痛 在终端里深度使用 Claude Code 一段时间后,你很快会遇到一个现实问题: 场景:前后端需求同时开发,一个终端跑 Claude Code,另一个查看日志,还需要随时管理文件、提交代码……多个终端窗口切来切去,既麻烦又不直观,完全看不到各终端的实时状态。 以前我的解法是 tmux。但 tmux 毕竟是上个世纪的工具:命令多、记不住,界面也不美观,感觉像在用古董。 直到我在 X 上看到 Claude Code 之父 Boris 的推文,他在用 Ghostty。我去试了试,然后又发现了 Yazi 和 Lazygit,这套组合彻底改变了我的终端工作流。 今天我们就来聊这个终端三件套: * 🖥️ Ghostty:现代化终端模拟器,原生支持多标签、分屏 * 📂 Yazi:用

By Ne0inhk

GitHub 爆火的 30+ 个 OpenClaw 真实场景全拆解

大家好,我是玄姐。 最近,霸榜 GitHub 的 OpenClaw 彻底火出圈了。作为一款能直接“看懂”屏幕、操控鼠标键盘的本地 AI Agent 框架,它证明了 AI 已经从“云端对话框”进化成了“超级打工人”。 很多读者在后台留言:“装是装上了,但我到底该用它干嘛?” 没问题。今天我们不搞虚的,直接把 GitHub 上开源的那份最具参考价值的 30+ 真实使用案例进行完整拆解。这 30 个案例不是玩具 Demo,而是实实在在运行在海外开发者、业务运营和数字游民电脑里的生产力工作流。 PS: 为了让大家更深度的搞懂 OpenClaw 和 Skills 技术体系实践,我会开场直播,欢迎点击预约,直播见。 为了方便阅读,我将这 30 个硬核案例分为了五大核心场景。

By Ne0inhk
TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

前言 我司内部在让机器人做一些行走-操作任务时,不可避免的需要全身遥操机器人采集一些任务数据,而对于全身摇操控制,目前看起来效果比较好的,并不多 * 之前有个CLONE(之前本博客内也解读过),但他们尚未完全开源 * 于此,便关注到了本文要解读的TWIST2,其核心创新是:无动捕下的全身控制 PS,如果你也在做loco-mani相关的工作,欢迎私我你的一两句简介,邀你加入『七月:人形loco-mani(行走-操作)』交流群 第一部分 TWIST2:可扩展、可移植且全面的人形数据采集系统 1.1 引言与相关工作 1.1.1 引言 如TWIST2原论文所说,现有的人形机器人远程操作系统主要分为三大类: 全身控制,直接跟踪人体姿态,包括手臂、躯干和腿部在内的所有关节以统一方式进行控制(如 HumanPlus [12],TWIST [1] ———— TWIST的介绍详见此文《TWIST——基于动捕的全身遥操模仿学习:教师策略RL训练,学生策略结合RL和BC联合优化(可训练搬箱子)》 部分全身控制,

By Ne0inhk