1.4 Очистка списка
Если список пуст, возвращается false, иначе чистим список head=null и возвращаем true.
Рисунок 1.5 – Чистим список.
1.5 Поиск элемента
Сначала проверяется, пуст ли список (переменная head). Если список пуст (то есть head равен null), то метод сразу возвращает false, потому что невозможно выполнить поиск в пустом списке. Если список не пуст, то создается переменная current, которая начинает указывать на голову списка (переменную head). Затем выполняется цикл while, который перебирает элементы списка, пока current не станет равным null. Это означает, что цикл будет продолжаться, пока не будет проверен каждый элемент списка. Внутри цикла проверяется, равно ли значение данных (поле Data) текущего узла current переданному значению element. Если они равны, то метод сразу возвращает true, обозначая, что элемент был найден в списке. Если текущий узел не содержит значение element, перемещаем указатель current на следующий узел списка (current = current.Next) и продолжаем поиск. Если весь список был пройден, и ни один элемент не соответствует element, метод возвращает false, что указывает на то, что элемент не был найден в списке.
Рисунок 1.6 – Поиск заданного элемента
1.6 Слияние двух списков
Сначала проверяется, пуст ли list1 (проверка list1.head == null). Если list1 пуст, то результатом объединения будет list2, и голова текущего списка (head) устанавливается равной голове list2, а метод завершает работу.Затем проверяется, пуст ли list2 (проверка list2.head == null). Если list2 пуст, то результатом объединения будет list1, и голова текущего списка (head) устанавливается равной голове list1, а метод также завершает работу. Создаются две переменные current1 и current2, которые начинают указывать на головы list1 и list2, соответственно. Сравнивается значение данных (поле Data) в первых узлах current1 и current2. Голова текущего списка (head) устанавливается равной узлу с меньшим значением. Создается переменная current, которая также начинает указывать на голову текущего списка (head). Затем выполняется цикл while, который перебирает оба списка, сравнивая значения элементов и добавляя их в объединенный список в порядке возрастания. Внутри цикла проверяется, какое значение меньше (current1.Data или current2.Data), и соответствующий узел добавляется к текущему объединенному списку, после чего указатель current перемещается к следующему элементу. После завершения цикла проверяется, остались ли элементы в list1 или list2, и оставшиеся элементы добавляются в объединенный список.
Рисунок 1.7 – Слияние двух списков.
1.7 Сортировка
Сначала проверяется, пуст ли список (head == null) или содержит только один элемент (head.Next == null). Если это так, то сортировка не требуется, и метод просто завершает свою работу. Создается переменная current, которая начинает указывать на голову списка (переменную head). Затем начинается внешний цикл while, который перебирает элементы списка. Внутри этого цикла создается переменная minNode, которая инициализируется текущим узлом current, и временная переменная temp, которая инициализируется новым узлом с данными 0. Запускается внутренний цикл while, который ищет минимальный элемент в оставшейся части списка. Если найден более маленький элемент (current.Next.Data < minNode.Data), обновляются minNode и temp. После завершения внутреннего цикла проверяется, был ли изменен узел (minNode != current). Если да, то переставляются узлы, чтобы упорядочить элементы. Указатель current перемещается к следующему узлу в списке.
Рисунок 2.7 – Сортировка.
