编辑
2025-10-21
C#
00

目录

单链表节点的定义
单链表的实现
示例:使用单链表
添加节点
删除节点
查找节点
总结

在C#中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。单链表是链表的一种形式,其中每个节点只包含指向下一个节点的单个链接。在本文中,我们将探讨如何在C#中实现单链表,并提供一些示例来说明其使用。

单链表节点的定义

首先,我们需要定义链表节点。在C#中,我们可以使用类来表示链表节点,如下所示:

C#
public class ListNode<T> { public T Value { get; set; } public ListNode<T> Next { get; set; } public ListNode(T value) { Value = value; Next = null; } }

在上面的代码中,ListNode<T>是一个泛型类,它具有两个属性:ValueNextValue属性用于存储节点的数据,而Next属性是对下一个ListNode<T>的引用。

单链表的实现

接下来,我们可以实现单链表类,它将使用ListNode<T>节点:

C#
// 定义一个泛型单链表类 public class SinglyLinkedList<T> { // 链表的头节点 public ListNode<T> Head { get; private set; } // 构造函数,初始化时链表为空 public SinglyLinkedList() { Head = null; } // 在链表的开始处添加一个新节点 public void AddFirst(T value) { // 创建一个新节点,其值为传入的value ListNode<T> newNode = new ListNode<T>(value); // 将新节点的下一个节点设置为当前的头节点 newNode.Next = Head; // 更新头节点为新节点 Head = newNode; } // 在链表的末尾添加一个新节点 public void AddLast(T value) { // 创建一个新节点,其值为传入的value ListNode<T> newNode = new ListNode<T>(value); // 如果链表为空,则新节点成为头节点 if (Head == null) { Head = newNode; return; } // 否则,遍历链表找到最后一个节点 ListNode<T> current = Head; while (current.Next != null) { current = current.Next; } // 将最后一个节点的下一个节点设置为新节点 current.Next = newNode; } // 从链表中移除一个值为value的节点 public bool Remove(T value) { // 从头节点开始遍历链表 ListNode<T> current = Head; ListNode<T> previous = null; while (current != null) { // 如果当前节点的值等于要移除的值 if (current.Value.Equals(value)) { // 如果要移除的节点是头节点 if (previous == null) { // 更新头节点为下一个节点 Head = current.Next; } else { // 将前一个节点的下一个节点设置为当前节点的下一个节点 previous.Next = current.Next; } // 返回true表示移除成功 return true; } // 继续遍历链表 previous = current; current = current.Next; } // 如果链表中没有找到值为value的节点,返回false return false; } // 打印链表中的所有节点 public void PrintList() { ListNode<T> current = Head; // 遍历链表 while (current != null) { // 打印当前节点的值和一个箭头 Console.Write(current.Value + " -> "); current = current.Next; } // 链表结束打印null Console.WriteLine("null"); } }

在上面的SinglyLinkedList<T>类中,我们定义了几个方法:

  • AddFirst(T value): 在链表开始处添加一个新节点。
  • AddLast(T value): 在链表末尾添加一个新节点。
  • Remove(T value): 从链表中删除具有特定值的节点。
  • PrintList(): 打印链表中的所有节点。

示例:使用单链表

现在我们已经定义了单链表的基本结构和操作,让我们来看几个使用这个数据结构的例子。

添加节点

C#
SinglyLinkedList<int> list = new SinglyLinkedList<int>(); list.AddFirst(3); list.AddFirst(2); list.AddFirst(1); list.PrintList(); // 输出:1 -> 2 -> 3 -> null list.AddLast(4); list.PrintList(); // 输出:1 -> 2 -> 3 -> 4 -> null

image.png

删除节点

C#
list.Remove(3); list.PrintList(); // 输出:1 -> 2 -> 4 -> null

查找节点

我们可以添加一个方法来查找链表中的节点:

C#
public ListNode<T> Find(T value) { ListNode<T> current = Head; while (current != null) { if (current.Value.Equals(value)) { return current; } current = current.Next; } return null; }

然后使用这个方法:

C#
ListNode<int> node = list.Find(2); if (node != null) { Console.WriteLine("Found node with value: " + node.Value); } else { Console.WriteLine("Node not found."); } // 输出:Found node with value: 2

image.png

总结

在本文中,我们介绍了如何在C#中实现单链表,包括定义链表节点、实现链表操作以及提供添加、删除和查找节点的示例。单链表是一种动态的数据结构,它允许我们在不重新分配整个数据结构的情况下添加和删除节点。掌握链表的实现和操作是学习数据结构和算法的重要一步。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!