📅  最后修改于: 2023-12-03 15:12:32.532000             🧑  作者: Mango
在 C# 中,链表(LinkedList)是一个非常常用的数据结构,可以用来存储一些有序的数据集合,可以在集合中进行添加、删除、查找等操作。链表有单向链表和双向链表两种,其中单向链表只能从头部遍历到尾部,不能反向遍历,而双向链表可以从头到尾遍历,也可以从尾到头遍历。
C# 中使用 LinkedList<T>
类型来实现单向链表。以下是一个创建单向链表的例子:
LinkedList<int> list = new LinkedList<int>();
list.AddLast(1);
list.AddLast(2);
list.AddLast(3);
list.AddLast(4);
list.AddLast(5);
以上代码创建了一个包含五个元素的单向链表。
遍历单向链表的方法有两种:使用 foreach
循环和使用 LinkedListNode<T>
类型进行手动遍历。以下是两种方法的示例:
使用 foreach
循环:
foreach(int num in list)
{
Console.WriteLine(num);
}
使用 LinkedListNode<T>
手动遍历:
LinkedListNode<int> current = list.First;
while(current != null)
{
Console.WriteLine(current.Value);
current = current.Next;
}
以上两种方法都会输出链表中的每个元素。
在单向链表中插入一个新的元素可以使用 AddFirst
、AddBefore
和 AddAfter
方法。其中,AddFirst
方法可以将新元素插入到链表的头部,AddBefore
方法可以将新元素插入到某个指定元素之前,AddAfter
方法可以将新元素插入到某个指定元素之后。以下是一个插入元素的示例:
// 在头部插入一个新元素
list.AddFirst(0);
// 在指定元素之前插入一个新元素
LinkedListNode<int> node = list.Find(3);
list.AddBefore(node, 2);
// 在指定元素之后插入一个新元素
node = list.Find(3);
list.AddAfter(node, 4);
以上代码的结果是将元素 0 插入到头部,将元素 2 插入到元素 3 的前面,将元素4 插入到元素 3 的后面。
在单向链表中删除一个元素可以使用 Remove
和 RemoveFirst
方法。其中,Remove
方法可以删除指定元素,RemoveFirst
方法可以删除链表的头部元素。以下是一个删除元素的示例:
// 删除指定元素
LinkedListNode<int> node = list.Find(3);
list.Remove(node);
// 删除头部元素
list.RemoveFirst();
以上代码的结果是将元素 3 从链表中删除,并将头部元素删除。
C# 中使用 LinkedList<T>
类型来实现双向链表,和单向链表创建方式相同。以下是创建双向链表的示例:
LinkedList<int> list = new LinkedList<int>();
list.AddLast(1);
list.AddLast(2);
list.AddLast(3);
list.AddLast(4);
list.AddLast(5);
以上代码创建了一个包含五个元素的双向链表。
遍历双向链表的方法和单向链表相似,也可以使用 foreach
循环和 LinkedListNode<T>
手动遍历。若要从尾到头遍历,只需要使用 Last
属性即可。以下是遍历双向链表的示例:
使用 foreach
循环:
foreach(int num in list)
{
Console.WriteLine(num);
}
使用 LinkedListNode<T>
手动遍历:
LinkedListNode<int> current = list.First;
while(current != null)
{
Console.WriteLine(current.Value);
current = current.Next;
}
current = list.Last;
while(current != null)
{
Console.WriteLine(current.Value);
current = current.Previous;
}
以上两种方法都会输出链表中的每个元素,第二个示例中的代码还会从尾到头输出每个元素。
在双向链表中插入新元素的方法和单向链表相似,只是新增了一个 AddLast
方法,用于将新元素插入到链表的尾部。下面是插入元素的示例:
// 在头部插入一个新元素
list.AddFirst(0);
// 在指定元素之前插入一个新元素
LinkedListNode<int> node = list.Find(3);
list.AddBefore(node, 2);
// 在指定元素之后插入一个新元素
node = list.Find(3);
list.AddAfter(node, 4);
// 在尾部插入一个新元素
list.AddLast(6);
以上代码的结果是将元素 0 插入到头部,将元素 2 插入到元素 3 的前面,将元素 4 插入到元素 3 的后面,将元素 6 插入到尾部。
在双向链表中删除元素的方法和单向链表相似。下面是删除元素的示例:
// 删除指定元素
LinkedListNode<int> node = list.Find(3);
list.Remove(node);
// 删除头部元素
list.RemoveFirst();
// 删除尾部元素
list.RemoveLast();
以上代码的结果是将元素 3 从链表中删除,并将头部元素和尾部元素删除。