📜  C#| LinkedList类(1)

📅  最后修改于: 2023-12-03 14:40:29.320000             🧑  作者: Mango

C# | LinkedList类

C#中的LinkedList类是一个双向链表,用于存储和操作数据集合。它可以在O(1)时间复杂度内执行添加、移除和查找操作,这使得它在大数据量的情况下比List更有效率。

创建一个LinkedList

在C#中创建LinkedList对象的方式非常简单:

LinkedList<int> linkedList = new LinkedList<int>();

这里创建了一个空的LinkedList,用于存储int类型的数据。你也可以创建一个包含初始数据的LinkedList,例如:

LinkedList<int> linkedList = new LinkedList<int>(new[] { 1, 2, 3 });

这里创建了一个包含整数123LinkedList

注意:和数组不同,LinkedList是动态的数据结构,它可以无限增长,所以你在创建时不需要指定它的大小。

添加和移除元素

LinkedList提供了多种方法用于添加和移除链表中的元素。例如,在链表末尾添加一个元素:

linkedList.AddLast(4);

这里将数字4添加到了链表的末尾。类似地,如果你想在链表开头添加一个元素:

linkedList.AddFirst(0);

这里将数字0添加到了链表的开头。

如果你需要从链表中移除一个元素,并返回它的值,可以使用RemoveLast()RemoveFirst()方法:

int lastValue = linkedList.RemoveLast();
int firstValue = linkedList.RemoveFirst();

这里移除了链表中的最后一个和第一个元素,并用了两个新变量储存被移除元素的值。

另一种移除元素的方式是使用Remove()方法,这个方法需要传入一个要移除的LinkedListNode对象:

LinkedListNode<int> node = linkedList.First;
linkedList.Remove(node);

这里通过First属性获取链表中第一个元素的LinkedListNode,并将它移除。

遍历元素

使用LinkedList类遍历元素,有两种主要的方式:通过LinkedListNode对象或使用foreach循环。

第一种方式需要手动创建一个LinkedListNode对象,并使用它的NextPrevious属性遍历到下一个或上一个元素。例如:

LinkedListNode<int> node = linkedList.First;
while (node != null)
{
    Console.WriteLine(node.Value);
    node = node.Next;
}

这里使用一个while循环遍历链表中的所有元素,并输出它们的值。

第二种方式则更为简单,只需要使用foreach循环遍历链表中的元素即可:

foreach (var value in linkedList)
{
    Console.WriteLine(value);
}

这里使用foreach循环遍历链表中的元素,并输出它们的值。

获取和查找元素

使用LinkedList类获取和查找元素,同样有两种方式。第一种是通过LinkedListNode对象,它提供了多个属性来访问链表中的元素。例如:

LinkedListNode<int> node = linkedList.First;
int firstValue = node.Value;
int lastValue = node.List.Last.Value;

这里使用First属性获取链表中的第一个元素,然后使用它的Value属性获取元素的值。同时,也可以通过List属性获取链表本身,并使用Last属性获取最后一个元素的值。

另一种方式是,使用Contains()方法查找一个元素是否存在于链表中:

bool containsValue = linkedList.Contains(2);

这里查找了数字2是否存在于链表中,返回的结果为布尔值。

更多操作

除了上述操作外,LinkedList类还提供了诸如Clear()CopyTo()Find()FindLast()AddAfter()AddBefore()等多个方法,你可以根据实际需要使用。

总结

LinkedList类是C#中非常有用的一个双向链表,它可以高效地存储和操作数据集合。在日常工作中,你可以使用它来优化程序的性能,实现更多有趣的功能。