0

0

C# 链表LinkedList使用方法 C#如何使用双向链表

幻夢星雲

幻夢星雲

发布时间:2026-02-05 10:47:02

|

118人浏览过

|

来源于php中文网

原创

LinkedList 初始化直接 new 即可,增删操作需通过节点而非索引,头尾操作为 O(1),但不支持索引访问;遍历时修改结构需手动遍历节点链,节点不可跨链表复用;适用场景限于高频头尾/已知节点附近增删,内存与缓存性能劣于 List。

c# 链表linkedlist使用方法 c#如何使用双向链表

LinkedList 初始化和基本增删操作

直接 new LinkedList 就能创建空双向链表,内部节点自带前后引用,不用手动维护指针。插入和删除在任意位置都是 O(1),但前提是得先拿到目标节点(LinkedListNode),而不是靠索引——它不支持 [i] 访问。

常见误用:想用 list.AddLast(x) 后立刻 list[0] 取值,会编译失败。正确做法是用 list.First.Valuelist.Last.Value 拿头尾元素。

  • AddFirst() / AddLast():插到头或尾,返回新节点(LinkedListNode
  • AddBefore(node, value) / AddAfter(node, value):必须传入已有节点,不是值或索引
  • Remove(node)Remove(value):前者快且稳定;后者会遍历找第一个匹配值,找不到不报错,只返回 false
  • 清空用 Clear(),别用循环 RemoveFirst(),性能差

如何安全获取和遍历 LinkedList 节点

遍历推荐用 foreach 直接枚举值:foreach (var item in list) { ... }。如果需要修改结构(比如边遍历边删),就不能用 foreach,得手动走节点链。

容易踩坑的是节点生命周期:一个 LinkedListNode 只属于一个 LinkedList 实例。把它从 A 链表 Remove() 后再塞进 B 链表,没问题;但如果没 Remove() 就直接 AddLast(node) 到另一个链表,会抛 InvalidOperationException:“The node belongs to a different LinkedList.”

  • 从值找节点用 Find(value),返回 LinkedListNode 或 null
  • 从节点取前后节点:用 node.Next / node.Previous,为空时返回 null(不是异常)
  • 遍历时删当前节点?必须先保存 node.Next,再调 list.Remove(node),否则 node.Next 会变 null

LinkedList 和 List 的关键区别与选型建议

别因为“链表听起来高级”就默认选 LinkedList。它的内存开销大(每个元素额外两个引用字段 + 节点对象),缓存不友好,遍历速度远慢于 List。真正适合它的场景很窄:

蓝色商务公司网站(XDcms内核)1.0
蓝色商务公司网站(XDcms内核)1.0

本系统使用的是XDcms内核,在原来基础上做来相应修改 前台修改调用数据,可以使用{loop catid=栏目ID}{/loop}方式调用 主要功能: A、内容管理模型,自定义字段,更方便扩展功能。自带模型:单页模型、新闻模型、产品模型、招聘模型 B、栏目自定义,便于内容管理 C、内容模块化,二次开发更便捷。自带模块:幻灯片、QQ客服、友情链接、自定义表单(在线留言、简历管理) D、模板管理,后台

下载
  • 频繁在头尾做插入/删除(比 List.Insert(0, x)RemoveAt(0) 快得多)
  • 需要在已知节点附近反复增删(比如实现 LRU 缓存,把刚访问的节点移到头)
  • 不能接受 List 扩容时的数组复制开销,且确定不会随机访问

如果只是偶尔插中间、大部分时间查第 i 个元素,或者数据量小(List 几乎总是更优。

常见错误:NullReferenceException 和 InvalidOperationException

两种异常最常出现在节点操作中:

  • NullReferenceException:对 null 节点调 node.Valuenode.Next,比如 Find() 返回 null 后没判空就直接用
  • InvalidOperationException:“The LinkedList node does not belong to this LinkedList.”——节点被重复添加,或从原链表移除前就被加到别的链表
  • InvalidOperationException:“The LinkedList is empty.”——对空链表调 First / Last 属性(它们是 get-only,不抛异常,但值为 null;真要取值必须先判空)

安全写法是:所有通过 FindFirstLast 拿到的节点,使用前先 if (node != null)

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

238

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

580

2024.03.01

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

119

2025.12.04

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

8

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

10

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

20

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.9万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 19.4万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号