当前位置: 首页 > article >正文

4-7-1.C# 数据容器 - LinkedList(LinkedList 的定义、LinkedList 结点的遍历、LinkedList 的常用方法)

LinkedList 概述

  1. LinkedList<T> 通过节点(Node)来存储数据,每个节点包含数据和指向下一个节点的引用

  2. LinkedList<T> 存储的元素是可重复的

  3. LinkedList<T> 支持泛型,可以指定存储的元素的类型

  4. LinkedList<T> 不支持索引,因为它通过节点(Node)来存储数据

  5. LinkedList<T> 不是线程安全的,在多线程环境中需要谨慎使用


一、LinkedList 的定义

  1. 定义 LinkedList
LinkedList<int> nums = new LinkedList<int>();
  1. 定义 LinkedList 并填充一些元素
LinkedList<int> nums = new LinkedList<int>(new int[] { 1, 2, 3, 4, 5 });

二、LinkedList 结点的遍历

1、使用 foreach 循环遍历
LinkedList<int> nums = new LinkedList<int>(new int[] { 1, 2, 3, 4, 5 });

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

1
2
3
4
5
2、使用 First 属性与 Next 属性遍历
LinkedList<int> nums = new LinkedList<int>(new int[] { 1, 2, 3, 4, 5 });

LinkedListNode<int> currentNode = nums.First;
while (currentNode != null)
{
    Console.WriteLine(currentNode.Value);
    currentNode = currentNode.Next;
}
# 输出结果

1
2
3
4
5

三、LinkedList 的常用方法

1、LinkedList 结点的添加(对于 LinkedList)
  1. 从 LinkedList 头部添加
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

1
2
3
  1. 从 LinkedList 尾部添加
LinkedList<int> nums = new LinkedList<int>();

nums.AddFirst(1);
nums.AddFirst(2);
nums.AddFirst(3);

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

3
2
1
  1. 从 LinkedList 头部和尾部添加
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

nums.AddFirst(1);
nums.AddFirst(2);
nums.AddFirst(3);

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

3
2
1
1
2
3
2、LinkedList 结点的添加(对于结点)
  1. 在某个结点之后添加
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

LinkedListNode<int> secondNode = nums.First.Next;
nums.AddAfter(secondNode, 10);

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

1
2
10
3
  1. 在某个结点之前添加
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

LinkedListNode<int> secondNode = nums.First.Next;
nums.AddBefore(secondNode, 10);

foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

1
10
2
3

3、LinkedList 结点的删除
  1. 删除指定数据的结点
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

Console.WriteLine("删除结点之前");
foreach (int value in nums)
{
    Console.WriteLine(value);
}

nums.Remove(2);

Console.WriteLine("删除结点之后");
foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

删除元素之前
1
2
3
删除元素之后
1
3
  1. 删除第一个结点
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

Console.WriteLine("删除结点之前");
foreach (int value in nums)
{
    Console.WriteLine(value);
}

nums.RemoveFirst();

Console.WriteLine("删除结点之后");
foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

删除元素之前
1
2
3
删除元素之后
2
3
  1. 删除最后一个结点
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

Console.WriteLine("删除结点之前");
foreach (int value in nums)
{
    Console.WriteLine(value);
}

nums.RemoveLast();

Console.WriteLine("删除结点之后");
foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

删除结点之前
1
2
3
删除结点之后
1
2
4、LinkedList 结点的清空
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

Console.WriteLine("清空结点之前");
foreach (int value in nums)
{
    Console.WriteLine(value);
}

nums.Clear();

Console.WriteLine("清空结点之后");
foreach (int value in nums)
{
    Console.WriteLine(value);
}
# 输出结果

清空结点之前
1
2
3
清空结点之后
5、LinkedList 结点的查找
LinkedList<int> nums = new LinkedList<int>();

nums.AddLast(1);
nums.AddLast(2);
nums.AddLast(3);

LinkedListNode<int> node = nums.Find(2);

Console.WriteLine(node.Value);
# 输出结果

2

http://www.kler.cn/a/406008.html

相关文章:

  • 掌握 Spring 事务管理:深入理解 @Transactional 注解
  • RocketMQ: 专业术语以及相关问题解决
  • 《Python制作动态爱心粒子特效》
  • ZYNQ-7020嵌入式系统学习笔记(1)——使用ARM核配置UART发送Helloworld
  • CSS实现实现当文本内容过长时,中间显示省略号...,两端正常展示
  • MyBatis的resultType和resultMap区别
  • 智能安全配电装置在高校实验室中的应用
  • AI 大模型如何重塑软件开发流程?——技术革新与未来展望
  • springboot基于Android的华蓥山旅游导航系统
  • 66 mysql 的 表自增长锁
  • .NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】
  • 【AI系统】GPU 架构回顾(从2018年-2024年)
  • django+boostrap实现发布博客权限控制
  • 计算机网络:应用层知识点概述及习题
  • PyPI 攻击:ChatGPT、Claude 模仿者通过 Python 库传播 JarkaStealer
  • 线性表:概念、顺序表实现与应用
  • 跨境出海安全:如何防止PayPal账户被风控?
  • 刷题-1122
  • node 使用multer中间件上传,报错Unexpected end of form
  • 如何更好的把控软件测试质量
  • 什么是 Faiss?
  • 大模型呼叫中心的智能培训如何实施?
  • 位运算 实现加法 详解
  • 快速识别模型:simple_ocr,部署教程
  • 【人工智能】用Python构建强化学习环境:从零开始实现迷宫游戏
  • NVR管理平台EasyNVR多品牌NVR管理工具的流媒体视频融合与汇聚管理方案