mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-04-21 05:07:35 +00:00
Use dataclasses in circular_linked_list.py (#10884)
* Use dataclasses in circular_linked_list.py * updating DIRECTORY.md --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
This commit is contained in:
parent
17059b7ece
commit
eb17fcf8f5
@ -157,6 +157,7 @@
|
|||||||
* [Prefix Conversions](conversions/prefix_conversions.py)
|
* [Prefix Conversions](conversions/prefix_conversions.py)
|
||||||
* [Prefix Conversions String](conversions/prefix_conversions_string.py)
|
* [Prefix Conversions String](conversions/prefix_conversions_string.py)
|
||||||
* [Pressure Conversions](conversions/pressure_conversions.py)
|
* [Pressure Conversions](conversions/pressure_conversions.py)
|
||||||
|
* [Rgb Cmyk Conversion](conversions/rgb_cmyk_conversion.py)
|
||||||
* [Rgb Hsv Conversion](conversions/rgb_hsv_conversion.py)
|
* [Rgb Hsv Conversion](conversions/rgb_hsv_conversion.py)
|
||||||
* [Roman Numerals](conversions/roman_numerals.py)
|
* [Roman Numerals](conversions/roman_numerals.py)
|
||||||
* [Speed Conversions](conversions/speed_conversions.py)
|
* [Speed Conversions](conversions/speed_conversions.py)
|
||||||
@ -198,6 +199,7 @@
|
|||||||
* [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py)
|
* [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py)
|
||||||
* [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py)
|
* [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py)
|
||||||
* [Merge Two Binary Trees](data_structures/binary_tree/merge_two_binary_trees.py)
|
* [Merge Two Binary Trees](data_structures/binary_tree/merge_two_binary_trees.py)
|
||||||
|
* [Mirror Binary Tree](data_structures/binary_tree/mirror_binary_tree.py)
|
||||||
* [Non Recursive Segment Tree](data_structures/binary_tree/non_recursive_segment_tree.py)
|
* [Non Recursive Segment Tree](data_structures/binary_tree/non_recursive_segment_tree.py)
|
||||||
* [Number Of Possible Binary Trees](data_structures/binary_tree/number_of_possible_binary_trees.py)
|
* [Number Of Possible Binary Trees](data_structures/binary_tree/number_of_possible_binary_trees.py)
|
||||||
* [Red Black Tree](data_structures/binary_tree/red_black_tree.py)
|
* [Red Black Tree](data_structures/binary_tree/red_black_tree.py)
|
||||||
|
@ -1,27 +1,20 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from collections.abc import Iterator
|
from collections.abc import Iterator
|
||||||
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class Node:
|
class Node:
|
||||||
def __init__(self, data: Any):
|
data: Any
|
||||||
"""
|
next_node: Node | None = None
|
||||||
Initialize a new Node with the given data.
|
|
||||||
Args:
|
|
||||||
data: The data to be stored in the node.
|
|
||||||
"""
|
|
||||||
self.data: Any = data
|
|
||||||
self.next: Node | None = None # Reference to the next node
|
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
class CircularLinkedList:
|
class CircularLinkedList:
|
||||||
def __init__(self) -> None:
|
head: Node | None = None # Reference to the head (first node)
|
||||||
"""
|
tail: Node | None = None # Reference to the tail (last node)
|
||||||
Initialize an empty Circular Linked List.
|
|
||||||
"""
|
|
||||||
self.head: Node | None = None # Reference to the head (first node)
|
|
||||||
self.tail: Node | None = None # Reference to the tail (last node)
|
|
||||||
|
|
||||||
def __iter__(self) -> Iterator[Any]:
|
def __iter__(self) -> Iterator[Any]:
|
||||||
"""
|
"""
|
||||||
@ -32,7 +25,7 @@ class CircularLinkedList:
|
|||||||
node = self.head
|
node = self.head
|
||||||
while node:
|
while node:
|
||||||
yield node.data
|
yield node.data
|
||||||
node = node.next
|
node = node.next_node
|
||||||
if node == self.head:
|
if node == self.head:
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -76,20 +69,20 @@ class CircularLinkedList:
|
|||||||
raise IndexError("list index out of range.")
|
raise IndexError("list index out of range.")
|
||||||
new_node: Node = Node(data)
|
new_node: Node = Node(data)
|
||||||
if self.head is None:
|
if self.head is None:
|
||||||
new_node.next = new_node # First node points to itself
|
new_node.next_node = new_node # First node points to itself
|
||||||
self.tail = self.head = new_node
|
self.tail = self.head = new_node
|
||||||
elif index == 0: # Insert at the head
|
elif index == 0: # Insert at the head
|
||||||
new_node.next = self.head
|
new_node.next_node = self.head
|
||||||
assert self.tail is not None # List is not empty, tail exists
|
assert self.tail is not None # List is not empty, tail exists
|
||||||
self.head = self.tail.next = new_node
|
self.head = self.tail.next_node = new_node
|
||||||
else:
|
else:
|
||||||
temp: Node | None = self.head
|
temp: Node | None = self.head
|
||||||
for _ in range(index - 1):
|
for _ in range(index - 1):
|
||||||
assert temp is not None
|
assert temp is not None
|
||||||
temp = temp.next
|
temp = temp.next_node
|
||||||
assert temp is not None
|
assert temp is not None
|
||||||
new_node.next = temp.next
|
new_node.next_node = temp.next_node
|
||||||
temp.next = new_node
|
temp.next_node = new_node
|
||||||
if index == len(self) - 1: # Insert at the tail
|
if index == len(self) - 1: # Insert at the tail
|
||||||
self.tail = new_node
|
self.tail = new_node
|
||||||
|
|
||||||
@ -130,18 +123,18 @@ class CircularLinkedList:
|
|||||||
if self.head == self.tail: # Just one node
|
if self.head == self.tail: # Just one node
|
||||||
self.head = self.tail = None
|
self.head = self.tail = None
|
||||||
elif index == 0: # Delete head node
|
elif index == 0: # Delete head node
|
||||||
assert self.tail.next is not None
|
assert self.tail.next_node is not None
|
||||||
self.tail.next = self.tail.next.next
|
self.tail.next_node = self.tail.next_node.next_node
|
||||||
self.head = self.head.next
|
self.head = self.head.next_node
|
||||||
else:
|
else:
|
||||||
temp: Node | None = self.head
|
temp: Node | None = self.head
|
||||||
for _ in range(index - 1):
|
for _ in range(index - 1):
|
||||||
assert temp is not None
|
assert temp is not None
|
||||||
temp = temp.next
|
temp = temp.next_node
|
||||||
assert temp is not None
|
assert temp is not None
|
||||||
assert temp.next is not None
|
assert temp.next_node is not None
|
||||||
delete_node = temp.next
|
delete_node = temp.next_node
|
||||||
temp.next = temp.next.next
|
temp.next_node = temp.next_node.next_node
|
||||||
if index == len(self) - 1: # Delete at tail
|
if index == len(self) - 1: # Delete at tail
|
||||||
self.tail = temp
|
self.tail = temp
|
||||||
return delete_node.data
|
return delete_node.data
|
||||||
|
Loading…
x
Reference in New Issue
Block a user