元宝    LeetCode 133. 克隆图 C语言实现
LeetCode 133 克隆图 在 C 语言中的实现主要难点在于图可能存在环需要用哈希表或数组记录已克隆的节点。C 语言没有自动垃圾回收和容器需要手动“malloc” 分配内存并正确管理指针。LeetCode 中节点值“val” 是 1 到 100 的唯一整数因此可以用数组直接作为映射表。C 语言中的图节点定义LeetCode 官方提供// Definition for a Node.struct Node {int val;int numNeighbors;struct Node** neighbors;};方法一DFS深度优先搜索递归思路使用数组“visited[101]” 存储“原节点val - 克隆节点指针” 的映射。递归时如果节点已克隆则直接返回否则创建新节点、记录到数组、再递归克隆邻居。#include stdlib.h// 递归辅助函数struct Node* dfs(struct Node* node, struct Node** visited) {if (node NULL) {return NULL;}// 如果已经克隆过直接返回克隆节点的指针 if (visited[node-val] ! NULL) { return visited[node-val]; } // 创建新节点并分配内存 struct Node* clone (struct Node*)malloc(sizeof(struct Node)); clone-val node-val; clone-numNeighbors node-numNeighbors; // 关键先存入 visited再递归防止环导致死循环 visited[node-val] clone; // 为邻居数组分配内存 if (clone-numNeighbors 0) { clone-neighbors (struct Node**)malloc( sizeof(struct Node*) * clone-numNeighbors ); for (int i 0; i clone-numNeighbors; i) { // 递归克隆每个邻居 clone-neighbors[i] dfs(node-neighbors[i], visited); } } else { clone-neighbors NULL; } return clone;}// LeetCode 入口函数struct Node* cloneGraph(struct Node* s) {if (s NULL) {return NULL;}// 假设节点 val 范围是 1~100初始化为 NULL struct Node* visited[101] {NULL}; return dfs(s, visited);}方法二BFS广度优先搜索迭代思路使用队列可以用数组模拟或链表实现进行广度遍历。同样利用“visited” 数组记录映射遇到未访问的邻居就创建新节点并入队。#include stdlib.h// 简单队列结构用数组实现#define MAX_NODES 101struct Node* cloneGraph(struct Node* s) {if (s NULL) return NULL;struct Node* visited[101] {NULL}; // 创建队列 struct Node* queue[MAX_NODES]; int front 0, rear 0; // 克隆起始节点 struct Node* clone_start (struct Node*)malloc(sizeof(struct Node)); clone_start-val s-val; clone_start-numNeighbors s-numNeighbors; visited[s-val] clone_start; queue[rear] s; while (front rear) { struct Node* cur queue[front]; // 为当前克隆节点分配邻居数组 if (cur-numNeighbors 0) { visited[cur-val]-neighbors (struct Node**)malloc( sizeof(struct Node*) * cur-numNeighbors ); } else { visited[cur-val]-neighbors NULL; } // 遍历所有邻居 for (int i 0; i cur-numNeighbors; i) { struct Node* neighbor cur-neighbors[i]; if (visited[neighbor-val] NULL) { // 如果邻居未克隆创建新节点并加入队列 struct Node* new_neighbor (struct Node*)malloc(sizeof(struct Node)); new_neighbor-val neighbor-val; new_neighbor-numNeighbors neighbor-numNeighbors; visited[neighbor-val] new_neighbor; queue[rear] neighbor; } // 将邻居的克隆体加入当前节点克隆体的 neighbors visited[cur-val]-neighbors[i] visited[neighbor-val]; } } return clone_start;}关键点解析难点 解决方案防止环导致无限递归 在递归/BFS 之前就把新节点指针存入“visited” 数组哈希映射 利用“val” 唯一且在“1~100” 的特性用数组代替哈希表内存分配 每个克隆节点和“neighbors” 数组都需要“malloc”注意“numNeighbors 0” 时置为“NULL”返回深拷贝 所有节点和边都是新分配的原图和克隆图完全独立复杂度分析时间复杂度“O(N)”每个节点和每条边只会被访问一次。空间复杂度“O(N)”“visited” 数组、“malloc” 的克隆图、以及递归栈/BFS 队列均占用“O(N)” 空间。⚠️ 注意LeetCode 的判题系统会自动检测内存泄漏但通常在算法题中只要正确“malloc” 且逻辑无误即可通过。如果是在生产环境需要配套实现图的销毁函数。如果需要我补充 图的销毁free函数 或 通用哈希表实现可以继续提问

相关新闻

helm学习

helm学习

Helm 知识点总结一、Helm 是什么Helm 是 Kubernetes 的包管理工具,类比:apt/yum/pip。Helm 可以把 K8s 的一堆 yaml(Deployment、Service、Ingress、ConfigMap、Secret)打包成一个应用包,一键部署、升级、回滚、卸载。…

2026/10/1 19:41:06 阅读更多 →
IGBT门极电阻怎么算?门极适配与保护电路设计|硬件篇·14

IGBT门极电阻怎么算?门极适配与保护电路设计|硬件篇·14

前言 450A的IGBT,门极电阻选多大合适?开通和关断电阻为什么要分开?退饱和检测怎么接才能不误触发? IGBT驱动核选好了(见硬件篇十三),门极适配电路才是真正决定开关性能的环节。本文以英飞凌 FF4…

2026/9/30 14:43:43 阅读更多 →
HCIE-Storage V4.0(存储4.0)考纲变化拆解:新增 15 分故障排查与 AI 存储考点

HCIE-Storage V4.0(存储4.0)考纲变化拆解:新增 15 分故障排查与 AI 存储考点

一句话摘要:HCIE-Storage V4.0 将于 2026 年 9 月 30 日正式发布。相对 V3.0,改动可以归纳成两条主线——考纲从四大模块重构成 CCSS/CCSN/CDPS 三大能力模块并加入 AI 存储内容;实验考试自 2026 年 7 月 1 日起新增 15 分"故障排查&quo…

2026/9/30 14:43:43 阅读更多 →

最新新闻

FreeRTOS任务机制深度解析:TCB、任务栈与就绪表的内存本质

FreeRTOS任务机制深度解析:TCB、任务栈与就绪表的内存本质

1. 为什么FreeRTOS新手总在“任务”上栽跟头:从一句xTaskCreate()说起我带过不少刚接触FreeRTOS的嵌入式新人,他们常卡在一个看似最基础的问题上:明明照着例程写了xTaskCreate(),任务却没跑起来;或者任务跑着跑着就死机…

2026/10/1 19:41:18 阅读更多 →
从零开始搞懂AI工程:模型部署、监控与回滚实战指南

从零开始搞懂AI工程:模型部署、监控与回滚实战指南

上个月有个读者私信我,说自己学了三个月的机器学习理论,Sklearn 里的模型能默写出来,但真让他把一个小模型部署成服务给同事用,直接就卡住了——环境装不明白、数据管道不完整、代码一跑就报错。他问我:“AI 工程从零开…

2026/10/1 19:41:18 阅读更多 →
TensorFlow实战笔记:从安装训练到部署与PyTorch对比

TensorFlow实战笔记:从安装训练到部署与PyTorch对比

做AI这一行,只要碰过深度学习,就绕不开TensorFlow这个名字。2015年Google把它开源出来以后,它几乎成了"深度学习框架"的代名词,至今仍然是生产环境里部署模型最稳的选择之一。这篇东西不是官方文档的复述,而…

2026/10/1 19:41:18 阅读更多 →
百度外包这几年:做对了什么,又踩了哪些坑?

百度外包这几年:做对了什么,又踩了哪些坑?

百度外包这几年,我到底做对了什么,又踩了哪些坑坐标某大厂生态链的外包岗,干了几年,从最初连需求评审都不敢说话的愣头青,到后来能独立带一条小业务线,算是把外包这份工作嚼碎了、咽下去了,也彻…

2026/10/1 19:41:18 阅读更多 →
Ouster激光雷达IP地址获取与配置:从网络原理到实战排查

Ouster激光雷达IP地址获取与配置:从网络原理到实战排查

刚拿到手的Ouster激光雷达,插上电、接上网线,满怀期待打开Ouster Studio,结果传感器列表空空如也。这个场景我在工作室里见过太多次,有时候是雷达还没启动完,更多时候是IP地址没对上。Ouster和很多USB摄像头不一样&…

2026/10/1 19:41:18 阅读更多 →
从零构建可交付AI系统:契约驱动的工程化实践

从零构建可交付AI系统:契约驱动的工程化实践

1. 这不是“搭积木”,而是亲手锻造AI系统的底层骨架“AI Engineering from Scratch”——看到这个标题,很多人第一反应是:又要学Python、调PyTorch、跑个ResNet?不。这六个单词背后压根不是“复现论文”或“微调模型”的轻量级动作…

2026/10/1 19:40:17 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →