
Связанный список представил .Net Framework 4. В C# LinkedList — это универсальный тип коллекции, определенный в пространстве имен System.Collections.Generic. Связанный список — это линейная структура данных, в которой элементы хранятся в виде узла. LinkedList состоит из узлов, где каждый узел содержит данные и ссылку на следующий узел в списке. Каждый узел имеет данные и следующий элемент. Показано на изображении ниже

Связанные списки — это типы данных, которые связаны друг с другом. Поскольку каждый узел связанного списка знает адрес другого, узлы могут располагаться в совершенно разных свободных областях памяти.
Существует 4 типа связанного списка
- Односвязные списки
- Двусвязные списки
- Круговые связанные списки
- Циклические двусвязные списки
Сначала я расскажу об односвязных списках. Самый простой, простой и легкий для понимания связный список Если вы можете понять односвязный список, вы поймете и другие. Связанный список имеет начальный и конечный элементы. Добавление и удаление элементов можно применять так же, как и в массивах, и лучшим преимуществом является то, что между ними можно добавить новый элемент.
На фото выше вы можете видеть первый и последний элемент (head-20). Первый элемент - это головной узел (я имею в виду 20), а последний элемент - 40. Какой следующий элемент из 20? Да, вы правы, это 30. Мы достаточно поговорили, давайте писать код. Мы создадим свой собственный узел
public class Node
{
public int Data { get; set; } //data is our own element(like 20 in the above photo)
public Node next { get; set; } //next node
}
У нас также есть класс с именем LinkList
public class LinkedList
{
Node head; // shows us the first element
Node tail; //last element
public void AddLast(int value) // helps us add elements in LinkedList(adds to the end)
{
Node element = new Node(); //node to be added
element.Data = value;
element.next = null;
if (head==null)
{
head = element; //keep head node
tail = element;
}
else
{
tail.next = element; //node after last node
tail = element; //last node update
}
}
public void Write() //I created this method so you can see the elements
{
if (head==null)
{
Console.WriteLine("empthy");
}
else
{
Node temp = head;
Console.Write("Head");
while (temp!=null)
{
Console.Write($" -> {temp.Data}");
temp = temp.next;
}
Console.WriteLine("-> Null");
}
}
}
И, наконец, мы вызываем LinkedList
LinkedList list = new LinkedList();
list.Add(20);
list.Add(30);
list.Add(40);
list.Write();
Это наш результат

Теперь добавим в конец
public void AddFirst(int value)
{
Node element = new Node();
element.Data = value;
if (head==null)
{
head = element;
tail = element;
}
else
{
element.next = head;
head = element;
}
}
LinkedList list = new LinkedList();
list.AddLast(20);
list.AddLast(30);
list.AddLast(40);
list.AddFirst(10);
list.AddLast(50);
list.AddLast(5);
list.AddLast(1 );
list.Write();
Результат

Я оставляю удаление на вас, вы напишите это
Если вы не понимаете, рекомендую запустить отладку и понаблюдать за всем процессом. Я разместил его на github для вас, если хотите, вы можете посмотреть здесь (GithubLink)