Класс LinkedList(Of T)
представляет двухсвязный список, в котором каждый элемент хранит указатель одновременно на предыдущий и на следующий
элемент.
В обычном списке List(Of T) каждый элемент является объектом типа T. А в LinkedList(Of T) каждый элемент представляет
объект класса LinkedListNode(Of T)
. Этот класс имеет следующие свойства:
Next: указатель на следующий элемент типа LinkedListNode(Of T) в списке. Если следующий элемент отсутствует, то имеет значение Nothing
Previous: указатель на предыдущий элемент типа LinkedListNode(Of T) в списке. Если предыдущий элемент отсутствует, то имеет значение Nothing
Value: само значение узла, представленное типом T
С помощью методов класса LinkedList(Of T) можно обращаться к различным элементам, как в конце, так и в начале списка:
AddAfter(node As LinkedListNode(Of T), newNode As LinkedListNode(Of T)): вставляет новый элемент newNode в список после элемента node.
AddAfter(node As LinkedListNode(Of T), value As T): добавляет в список новый элемент со значением value после элемента node
AddBefore(node As LinkedListNode(Of T), newNode As LinkedListNode(Of T)): добавляет в список новый элемент newNode перед элементом node.
AddBefore(node As LinkedListNode(Of T), value As T): вставляет в список новый элемент со значением value перед элементом node.
AddFirst(node As LinkedListNode(Of T)): вставляет новый элемент в начало списка
AddFirst(value As T): вставляет новый элемент со значением value в начало списка
AddLast(node As LinkedListNode(Of T)): добавляет новый элемент в конец списка
AddLast(value As T): вставляет новый элемент со значением value в конец списка
RemoveFirst(): удаляет первый элемент из списка, после чего первым элементом становится элемент, следующий за удаленным
RemoveLast(): удаляет последний элемент из списка
Используем двухсвязный список в программе:
Module Module1 Sub Main() Dim nums As New LinkedList(Of Integer)() nums.AddLast(1) 'добавляем элемент со значением 1 в конец 'так как в списке нет элементов, то последний элемент будет также и первым nums.AddFirst(2) 'добавляем элемент со значением 2 в самое начало nums.AddAfter(nums.Last, 3) 'вставляем после последнего элемента новый со значением 3 'теперь список представляет следующую последовательность: 2, 1, 3 For Each i As Integer In nums Console.WriteLine(i) Next Dim people As New LinkedList(Of Person)() 'добавляем объект Person в список и получаем объект LinkedListNode, в котором хранится имя Tom Dim tom As LinkedListNode(Of Person) = people.AddLast(New Person() With {.Name = "Tom"}) people.AddLast(New Person() With {.Name = "John"}) people.AddFirst(New Person() With {.Name = "Bill"}) Console.WriteLine(tom.Previous.Value.Name) 'получаем узел перед томом и его значение Console.WriteLine(tom.Next.Value.Name) 'получаем узел после тома и его значение Console.ReadLine() End Sub Class Person Public Property Name() As String End Class End Module
В данном примере создаются и используются два списка: для чисел и для объектов класса Person. С числами, наверное, все более менее просто, поэтому рассмотрим работу с классом Person.
Методы AddLast
, AddFirst
при добавлении в список возвращают ссылку на добавленный элемент
LinkedListNode(Of T) (в нашем случае LinkedListNode (Of Person)). Затем с помощью свойств Previous
и Next
мы можем получить ссылки на предыдущий и следующий элементы в списке.