📜  链表遵循 c# 中的内容(1)

📅  最后修改于: 2023-12-03 15:12:32.532000             🧑  作者: Mango

链表遵循 c# 中的内容

在 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;
}

以上两种方法都会输出链表中的每个元素。

在单向链表中插入元素

在单向链表中插入一个新的元素可以使用 AddFirstAddBeforeAddAfter 方法。其中,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 的后面。

在单向链表中删除元素

在单向链表中删除一个元素可以使用 RemoveRemoveFirst 方法。其中,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 从链表中删除,并将头部元素和尾部元素删除。