День изучения Python

Связный список — это структура данных, состоящая из последовательности элементов, где каждый элемент указывает на следующий элемент в списке. В отличие от массивов или списков в Python, связанные списки не хранят элементы в смежных областях памяти. Вместо этого каждый элемент в связанном списке содержит данные и ссылку на следующий узел в списке.

Узел

class Node:
def __init__(self, data):
        self.data = data
        self.next = None

Узел — это структура данных, которая содержит две важные части информации: данные и одну или несколько ссылок на другие узлы.

Связанный список

__в этом__()

class LinkedList:
    def __init__(self):
        self.head = None

Инициализирует связанный список с узлом ahead, для которого изначально задано значение None.

добавить (я, данные)

Добавляет новый узел с заданным data в конец связанного списка. Если список пуст, новый узел становится head.

В противном случае он просматривает список, чтобы найти последний узел, и добавляет этот узел в качестве ссылки next.

def append(self, data):
    new_node = Node(data)
    if not self.head:
          self.head = new_node
     else:
          current = self.head
          while current.next:
              current = current.next
          current.next = new_node

добавить (я, данные)

Добавляет новый узел с заданным data в начало связанного списка. Он изменяет ссылку next нового узла на текущий узел head и обновляет ссылку head на новый узел.

def prepend(self, data):
    new_node = Node(data)
    new_node.next = self.head
    self.head = new_node

удалить (себя, данные)

Удаляет первое вхождение узла с заданным data из связанного списка.

Он проходит по списку, отслеживая предыдущий узел и текущий узел, пока не найдет узел с указанными данными.

Затем он обновляет ссылку next на предыдущий узел, чтобы пропустить текущий узел.

def delete(self, data):
    current = self.head
    if current and current.data == data:
        self.head = current.next
        return
    prev = None
    while current and current data!= data:
        prev = current
        current = current.next
    if current is None:
        return
    prev.next = current.next

дисплей (я)

Отображает элементы связанного списка в порядке от head до конца.

def display(self):
    elements = []
    current = self.head
    while current:
        elements.append(current.data)
        current = current.next
    print(" -> ".join(map(str, elements))))

поиск(я, данные)

Ищет первое вхождение узла с заданным data в связанном списке. Если найдено, возвращаетTrue; в противном случае возвращается False.

def search(self, data):
    current = self.head
    while current:
        if current.data == data:
            return True
        current = current.next
    return False

Примеры кода

Create a new linked list
my_list = LinkedList()

# Append some elements
my_list.append(5)
my_list.append(10)
my_list.append(15)

Display the linked list
my_list.display()  # Output: 5 -> 10 -> 15

# Prepend an element
my_list.prepend(1)

Display the linked list
my_list.display()  # Output: 1 -> 5 -> 10 -> 15

Search for an element
print(my_list.search(10))  Output: True

# Delete an element
my_list.delete(5)

Display the linked list
my_list.display()  # Output: 1 -> 10 -> 15