/
geftea
/
Algorithms
Обзор
Документация
Войти
/
geftea
/
Algorithms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
LinkedListfull
117 строк
4 KB
geftea
create LinkedListfull
26 фев 2025, 23:49
26 фев 2025, 23:49
8a72c2d
Код
Авторство
О чём код?
class Node: def __init__(self, value, link_to_next=None): self.value = value self.link_to_next = link_to_next def link(self, new_element): self.link_to_next = new_element class LinkedList: def __init__(self): self.first_node = Node(None, None) self.previous_node = self.first_node def append(self, value): new_node = Node(value, None) self.previous_node.link(new_node) self.previous_node = new_node def print_list(self): current = self.first_node.link_to_next while current: print(current.value, end=" ") current = current.link_to_next print() def len(self): length = 0 current = self.first_node.link_to_next while current: length += 1 current = current.link_to_next return length def get_at(self, index): current = self.first_node.link_to_next count = 0 while current: if count == index: return current.value count += 1 current = current.link_to_next raise IndexError("Index out of range") def set_at(self, index, value): current = self.first_node.link_to_next count = 0 while current: if count == index: current.value = value return count += 1 current = current.link_to_next raise IndexError("Index out of range") def delete_at(self, index): current = self.first_node count = 0 while current.link_to_next: if count == index: current.link_to_next = current.link_to_next.link_to_next return count += 1 current = current.link_to_next raise IndexError("Index out of range") def insert_at(self, index, value): new_node = Node(value) current = self.first_node count = 0 while current: if count == index: new_node.link_to_next = current.link_to_next current.link_to_next = new_node return count += 1 current = current.link_to_next raise IndexError("Index out of range") def delete_last(self): current = self.first_node while current.link_to_next.link_to_next: current = current.link_to_next current.link_to_next = None def delete_first(self): self.first_node.link_to_next = self.first_node.link_to_next.link_to_next def insert_first(self, value): new_node = Node(value, self.first_node.link_to_next) self.first_node.link_to_next = new_node def insert_last(self, value): new_node = Node(value, None) self.previous_node.link(new_node) self.previous_node = new_node def reverse_second_half(self): length = 0 current = self.first_node.link_to_next while current: length += 1 current = current.link_to_next if length < 2: return mid = length // 2 current = self.first_node.link_to_next for _ in range(mid - 1): current = current.link_to_next previous = None second_half = current.link_to_next while second_half: next_node = second_half.link_to_next second_half.link_to_next = previous previous = second_half second_half = next_node current.link_to_next = previous