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

Spring AI Tool Calling(工具调用)详解——让大模型拥有“动手能力“

Spring AI Tool Calling(工具调用)详解——让大模型拥有“动手能力“

定位:本文是 Spring AI 系列博客之一。我们将从为什么需要工具调用讲起,结合 Spring AI 官方文档和实战代码,一步步带你理解 Tool Calling 的原理、用法和进阶技巧。即使你是初学者,也能看懂。 希望对于大家学习Spring AI 有帮助 目录 * 1. 什么是 Tool Calling? * 2. 为什么需要 Tool Calling? * 3. Tool Calling 的工作原理 * 4. 快速入门:第一个工具 * 5. 定义工具的三种方式 * 6. 工具规范(Tool Specification) * 7. 使用工具的两种 API * 8. @ToolParam——告诉模型参数怎么填 * 9. ToolContext—

By Ne0inhk
OpenClaw:一只“小龙虾”如何用三个月掀翻AI圈,让黄仁勋惊呼“超越Linux”?

OpenClaw:一只“小龙虾”如何用三个月掀翻AI圈,让黄仁勋惊呼“超越Linux”?

目录 一、发展历史:一个“退休”程序员的10天“玩票”,如何引爆全球? 1. 故事的起点:奥地利“闲人”的10天代码狂欢 2. 改名风波:被Anthropic“追杀”的龙虾 3. 封神时刻:25万星标,超越Linux 4. 大佬“接盘”:OpenAI的橄榄枝 二、OpenClaw是什么?——给AI装上“手”和“眼睛” 核心定义:从“嘴”到“手”的进化 四层架构:一只龙虾的解剖图 它能做什么?——那些让人惊叹的实战案例 三、竞品分析:当“龙虾”火了,模仿者们来了 1. OpenClaw:

By Ne0inhk
告别“只会聊天”的AI!OpenClaw小白入门:定位、部署、场景全攻略

告别“只会聊天”的AI!OpenClaw小白入门:定位、部署、场景全攻略

摘要 本文专为OpenClaw小白打造,全面拆解这款开源AI智能体框架的核心内容,帮你快速理清OpenClaw的定位、核心特点与使用价值——它并非传统聊天机器人,而是能直接操控电脑/服务器、自动完成办公自动化、文件处理、代码开发等真实任务的“数字员工”。文中涵盖小白必知的核心能力、适用场景、极简部署步骤、安全注意事项,以及与传统AI工具的关键区别,同时附上生态社区资源,搭配内容逻辑图,让零基础用户也能快速入门,轻松上手OpenClaw,解锁AI高效干活新方式。 OpenClaw(俗称 “小龙虾”)是本地优先、开源免费、能真正动手执行任务的 AI 智能体框架,核心是让 AI 从 “聊天” 变成 “干活”。作为小白,你需要先掌握它的定位、核心能力、部署与使用、安全与隐私、生态与扩展这 5 块关键内容。 一、OpenClaw 是什么(一句话看懂) OpenClaw 是开源、

By Ne0inhk
零基础学AI大模型之Agent智能体

零基础学AI大模型之Agent智能体

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析消息队列深入浅出 RabbitMQ-RabbitMQ消息确认机制(ACK)AI大模型零基础学AI大模型之RunnableBranch 前情摘要 1、零基础学AI大模型之读懂AI大模型 2、零基础学AI大模型之从0到1调用大模型API 3、零基础学AI大模型之SpringAI 4、零基础学AI大模型之AI大模型常见概念 5、零基础学AI大模型之大模型私有化部署全指南 6、零基础学AI大模型之AI大模型可视化界面 7、零基础学AI大模型之LangChain 8、零基础学AI大模型之LangChain六大核心模块与大模型IO交互链路 9、零基础学AI大模型之Prompt提示词工程 10、零基础学AI大模型之LangChain-PromptTe

By Ne0inhk