news 2026/4/18 5:22:02

“链表按索引插入”在业界用的多吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
“链表按索引插入”在业界用的多吗?

在开源项目中(如 Linux Kernel, Redis, GNOME GLib 等)

1. 极少使用“按索引插入” (Insert at Index)

在高性能 C 编程中,链表主要用于O ( 1 ) O(1)O(1)的头插、尾插或特定节点前后的插入
如果你频繁需要“在第i ii个位置插入”,说明你选错了数据结构——这种场景应该使用数组 (Array)动态数组 (Vector)。链表的“按索引访问”是O ( N ) O(N)O(N)的,效率极低。

因此,很多开源库甚至不提供insert_at_index(i)这种 API。

2. Linux Kernel (list.h)

Linux 内核使用的是双向循环链表,它的设计极其精简,不存储长度

  • 越界判断:它没有“越界”的概念,因为它的 API 是list_add(new, head)(插到头)或list_add(new, prev_node)(插到某节点后)。
  • 设计哲学:这里的假设是调用者已经持有了一个有效的节点指针。
3. Redis (adlist.c)

Redis 实现了一个通用的双向链表,它的结构体明确包含了长度

// Redis 的 list 定义typedefstructlist{listNode*head;listNode*tail;unsignedlonglen;// <--- 这里保存了长度// ... 函数指针等 ...}list;
  • 做法:Redis 确实维护了长度。
  • 但注意:即使有了len,Redis 的核心 API 依然主要是listAddNodeHeadlistAddNodeTail。如果它要实现Index操作(如listIndex获取节点),它会利用len来决定是从头遍历更快还是从尾遍历更快(优化),但插入操作依然很少基于索引。

4. 总结建议

  1. 如果是刷题/简单练习:不要维护length。在遍历寻找插入点的while循环中判断p是否为NULL,以此作为越界判断。
  2. 如果是工程项目:建议定义一个struct List { Node* head; int len; }
    • 这样你可以在开头判断i > len
    • 这能让调用者快速获取链表长度(O(1)),非常实用。

只有当你将链表长度缓存在结构体中时,才能在函数开头判断越界。否则,必须通过遍历来检测。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:20:48

中国2000-2024年500m分辨率逐月叶面积指数(LAI)数据集

一、数据介绍 数据名称&#xff1a;MOD15A2H叶面积指数&#xff08;LAI&#xff09;数据 时间跨度&#xff1a;2000-2024年&#xff08;2000年2月-2024年12月】2020缺1月&#xff09; 空间分辨率&#xff1a;500m 坐标系&#xff1a;GCS_WGS_1984 数据格式&#xff1a;Tif…

作者头像 李华
网站建设 2026/4/18 6:58:02

AutoGPT如何避免陷入无限循环?防呆机制设计原理

AutoGPT如何避免陷入无限循环&#xff1f;防呆机制设计原理 在当前大型语言模型&#xff08;LLM&#xff09;快速演进的背景下&#xff0c;AI智能体正从“被动应答”走向“主动执行”。AutoGPT作为早期自主代理&#xff08;Autonomous Agent&#xff09;的代表项目&#xff0c;…

作者头像 李华
网站建设 2026/4/18 8:26:34

LobeChat功能全解析:插件、角色预设与多模型接入实战

LobeChat功能全解析&#xff1a;插件、角色预设与多模型接入实战 在企业开始将大语言模型&#xff08;LLM&#xff09;深度嵌入日常运营的今天&#xff0c;一个普遍的困境浮出水面&#xff1a;如何在不牺牲数据安全的前提下&#xff0c;让AI真正“动起来”&#xff1f;市面上的…

作者头像 李华
网站建设 2026/4/18 7:40:36

Qwen3-14B支持32K长上下文,轻松应对长文档分析任务

Qwen3-14B&#xff1a;32K长上下文如何重塑企业级AI应用 在金融分析师面对一份上百页的年报时&#xff0c;最怕什么&#xff1f;不是数据复杂&#xff0c;而是模型“记不住开头”。传统大语言模型处理长文本时常常顾此失彼——读到第80页&#xff0c;早已忘了第5页的关键定义。…

作者头像 李华
网站建设 2026/4/18 8:02:13

7、基于GEE 平台的 VIIRS 夜间灯光监测工具

VIIRS 夜间灯光监测工具 这是一个基于 Google Earth Engine (GEE) 的交互式应用程序&#xff0c;用于监测、分析和下载 NOAA VIIRS 月度夜间灯光数据。该工具集成了动态可视化、时序分析、GIF 动图生成以及批量数据导出到 Google Drive 的功能。 ✨ 主要功能自定义时间范围: 支…

作者头像 李华