Двухсвязный список LinkedList(Of T)

Последнее обновление: 30.10.2015

Класс 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 мы можем получить ссылки на предыдущий и следующий элементы в списке.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850