链表<T>类存在于System.Collections.Generic命名空间。这种通用类型允许快速插入和删除元素。它实现了经典的链表。每个对象都是单独分配的。在LinkedList中, 某些操作不需要复制整个集合。但是在许多常见情况下, LinkedList会影响性能。
LinkedList类的特征:
- LinkedList <T>是通用链表。它支持枚举器。
- 插入和移除是O(1)操作。
- 你可以删除节点并将它们重新插入同一列表或另一个列表中, 这将导致在堆上没有分配其他对象。
- 由于列表还维护内部计数, 因此获取Count属性是O(1)操作。
- LinkedList中的每个节点T>对象的类型为LinkedListNode <T>。
- LinkedList类不支持链接, 拆分, 循环或其他可能会使列表处于不一致状态的功能。
- 如果LinkedList为空, 则第一和持续属性包含null。
- LinkedList是双重链接的, 因此, 每个节点都指向下一个节点, 并指向上一个节点。
建设者
建设者 | 描述 |
---|---|
LinkedList() | 初始化一个为空的LinkedList类的新实例。 |
LinkedList(IEnumerable) | 初始化LinkedList类的新实例, 该实例包含从指定IEnumerable复制的元素, 并具有足够的容量来容纳复制的元素数量。 |
LinkedList(SerializationInfo, StreamingContext) | 初始化LinkedList类的新实例, 该实例可使用指定的SerializationInfo和StreamingContext进行序列化。 |
例子:
//C# code to create a LinkedList
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
//Driver code
public static void Main()
{
//Creating a LinkedList of Strings
LinkedList<String> myList = new LinkedList<String>();
//Adding nodes in LinkedList
myList.AddLast( "Geeks" );
myList.AddLast( "for" );
myList.AddLast( "Data Structures" );
myList.AddLast( "Noida" );
//To check if LinkedList is empty or not
if (myList.Count> 0)
Console.WriteLine( "LinkedList is not empty" );
else
Console.WriteLine( "LinkedList is empty" );
}
}
输出如下:
LinkedList is not empty
属性
属性 | 描述 |
---|---|
计数 | 获取实际包含在LinkedList中的节点数。 |
第一 | 获取LinkedList的第一个节点。 |
持续 | 获取LinkedList的最后一个节点。 |
例子:
//C# code to illustrate the
//LinkedList<T> class properties
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
//Driver code
public static void Main()
{
//Creating a LinkedList of Strings
LinkedList<String> myList = new LinkedList<String>();
//Adding nodes in LinkedList
myList.AddLast( "lsbin" );
myList.AddLast( "GFG" );
myList.AddLast( "Data Structures" );
myList.AddLast( "Noida" );
//------- Count Property -------
//To get the first node of the LinkedList
if (myList.Count> 0)
Console.WriteLine(myList.First.Value);
else
Console.WriteLine( "LinkedList is empty" );
//------- Last Property -------
//To get the last node of the LinkedList
if (myList.Count> 0)
Console.WriteLine(myList.Last.Value);
else
Console.WriteLine( "LinkedList is empty" );
}
}
输出如下:
lsbin
Noida
方法
方法 | 描述 |
---|---|
AddAfter | 在LinkedList中的现有节点之后添加新节点或值。 |
AddBefore | 在LinkedList中的现有节点之前添加新节点或值。 |
AddFirst | 在LinkedList的开头添加新的节点或值。 |
AddLast | 在LinkedList的末尾添加一个新节点或值。 |
Clear() | 从LinkedList中删除所有节点。 |
Contains(T) | 确定值是否在LinkedList中。 |
CopyTo(T [], Int32) | 从目标数组的指定索引处开始, 将整个LinkedList复制到兼容的一维数组。 |
Equals(对象) | 确定指定对象是否等于当前对象。 |
Find(T) | 查找包含指定值的第一个节点。 |
FindLast(T) | 查找包含指定值的最后一个节点。 |
GetEnumerator() | 返回遍历LinkedList的枚举数。 |
GetHashCode() | 用作默认哈希函数。 |
GetObjectData(SerializationInfo, StreamingContext) | 实现ISerializable接口, 并返回序列化LinkedList实例所需的数据。 |
GetType() | 获取当前实例的类型。 |
MemberwiseClone() | 创建当前对象的浅表副本。 |
OnDeserialization(Object) | 当反序列化完成时, 实现ISerializable接口并引发反序列化事件。 |
Remove(LinkedListNode) | 从LinkedList中删除指定的节点。 |
Remove(T) | 从LinkedList中删除第一次出现的指定值。 |
RemoveFirst() | 删除LinkedList开头的节点。 |
RemoveLast() | 删除LinkedList末尾的节点。 |
ToString() | 返回表示当前对象的字符串。 |
例子:
//C# code to check if a
//value is in LinkedList
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
//Driver code
public static void Main()
{
//Creating a LinkedList of Strings
LinkedList<String> myList = new LinkedList<String>();
//Adding nodes in LinkedList
myList.AddLast( "A" );
myList.AddLast( "B" );
myList.AddLast( "C" );
myList.AddLast( "D" );
myList.AddLast( "E" );
//To check if a value is in LinkedList
Console.WriteLine(myList.Contains( "B" ));
}
}
输出如下:
True
例子:
//C# code to remove the specified
//node from the LinkedList
using System;
using System.Collections;
using System.Collections.Generic;
class GFG {
//Driver code
public static void Main()
{
//Creating a LinkedList of Integers
LinkedList<int> myList = new LinkedList<int>();
//Adding nodes in LinkedList
myList.AddLast(2);
myList.AddLast(4);
myList.AddLast(6);
myList.AddLast(8);
//To get the count of nodes in LinkedList
//before removing all the nodes
Console.WriteLine( "Total nodes in myList are : " + myList.Count);
//Displaying the nodes in LinkedList
foreach ( int i in myList)
{
Console.WriteLine(i);
}
//Removing the first node from the LinkedList
myList.Remove(myList.First);
//To get the count of nodes in LinkedList
//after removing all the nodes
Console.WriteLine( "Total nodes in myList are : " + myList.Count);
//Displaying the nodes in LinkedList
foreach ( int i in myList)
{
Console.WriteLine(i);
}
}
}
输出如下:
Total nodes in myList are : 4
2
4
6
8
Total nodes in myList are : 3
4
6
8
参考:
- https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.linkedlist-1?view=netframework-4.7.2