LinkedList<T> 类存在于 System.Collections.Generic 命名空间中。这种通用类型允许快速插入和删除元素。它实现了一个经典的链表。每个对象都是单独分配的。在 LinkedList 中,某些操作不需要复制整个集合。但在许多常见情况下,LinkedList 会影响性能。
LinkedList 类的特征:
- 链表<T>是一个通用链表。它支持枚举器。
- 插入和移除是O(1)运营。
- 您可以删除节点并重新插入它们,无论是在同一个列表中还是在另一个列表中,这都会导致堆上不会分配任何其他对象。
- 由于列表还维护内部计数,因此获取 Count 属性是一个 O(1) 操作。
- LinkedList 中的每个节点<T> 对象的类型为 LinkedListNode<T>。
- LinkedList 类不支持链接、拆分、循环或其他可能使列表处于不一致状态的函数。
- 如果LinkedList为空,则第一的和最后的属性包含 null。
- LinkedList 是双向链接的,因此,每个节点向前指向下一个节点,向后指向上一个节点。
Constructors
构造函数 | 说明 |
---|---|
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
Properties
属性 | 说明 |
---|---|
Count | 获取 LinkedList 中实际包含的节点数。 |
First | 获取 LinkedList 的第一个节点。 |
Last | 获取 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("GeeksforGeeks");
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");
}
}
输出:
GeeksforGeeks Noida
Methods
方法 | 说明 |
---|---|
AddAfter | 在 LinkedList 中的现有节点之后添加新节点或值。 |
AddBefore | 在 LinkedList 中的现有节点之前添加新节点或值。 |
AddFirst | 在 LinkedList 的开头添加新节点或值。 |
AddLast | 在 LinkedList 的末尾添加新节点或值。 |
Clear() | 从 LinkedList 中删除所有节点。 |
Contains(T) | 确定某个值是否在 LinkedList 中。 |
复制到 (T[], Int32) | 从目标数组的指定索引开始,将整个 LinkedList 复制到兼容的一维数组。 |
Equals(Object) | 确定指定对象是否等于当前对象。 |
Find(T) | 查找包含指定值的第一个节点。 |
FindLast(T) | 查找包含指定值的最后一个节点。 |
GetEnumerator() | 返回一个遍历 LinkedList 的枚举器。 |
GetHashCode() | 用作默认的哈希函数。 |
GetObjectData(SerializationInfo, StreamingContext) | 实现 ISerialized 接口并返回序列化 LinkedList 实例所需的数据。 |
GetType() | 获取当前实例的类型。 |
MemberwiseClone() | 创建当前对象的浅拷贝。 |
OnDeserialization(Object) | 实现 ISerialized 接口并在反序列化完成时引发反序列化事件。 |
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
参考:
相关用法
- C# Linq Aggregate()用法及代码示例
- C# Linq Concat()用法及代码示例
- C# Linq Distinct()用法及代码示例
- C# Linq Intersect()用法及代码示例
- C# Linq Reverse()用法及代码示例
- C# Linq ThenBy()用法及代码示例
- C# Linq ThenByDescending()用法及代码示例
- C# Linq Union()用法及代码示例
- C# List.TrimExcess用法及代码示例
- C# List.FindIndex()用法及代码示例
- C# List BinarySearch()用法及代码示例
- C# List FindLastIndex()方法用法及代码示例
- C# List FindLastIndex()函数用法及代码示例
- C# ListBox用法及代码示例
- C# ListDictionary用法及代码示例
- C# List用法及代码示例
- C# List和Set的区别用法及代码示例
- C# String Clone()用法及代码示例
- C# String Compare()用法及代码示例
- C# String CompareOrdinal()用法及代码示例
- C# String CompareTo()用法及代码示例
- C# String Concat()用法及代码示例
- C# String Contains()用法及代码示例
- C# String Copy()用法及代码示例
- C# String CopyTo()用法及代码示例
注:本文由纯净天空筛选整理自Sahil_Bansall大神的英文原创作品 C# | LinkedList Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。