@@ -20,8 +20,8 @@ def __init__(self) -> None:
20
20
"""
21
21
Initialize an empty Circular Linked List.
22
22
"""
23
- self .head = None # Reference to the head (first node)
24
- self .tail = None # Reference to the tail (last node)
23
+ self .head : Node | None = None # Reference to the head (first node)
24
+ self .tail : Node | None = None # Reference to the tail (last node)
25
25
26
26
def __iter__ (self ) -> Iterator [Any ]:
27
27
"""
@@ -30,7 +30,7 @@ def __iter__(self) -> Iterator[Any]:
30
30
The data of each node in the linked list.
31
31
"""
32
32
node = self .head
33
- while self . head :
33
+ while node :
34
34
yield node .data
35
35
node = node .next
36
36
if node == self .head :
@@ -74,17 +74,20 @@ def insert_nth(self, index: int, data: Any) -> None:
74
74
"""
75
75
if index < 0 or index > len (self ):
76
76
raise IndexError ("list index out of range." )
77
- new_node = Node (data )
77
+ new_node : Node = Node (data )
78
78
if self .head is None :
79
79
new_node .next = new_node # First node points to itself
80
80
self .tail = self .head = new_node
81
81
elif index == 0 : # Insert at the head
82
82
new_node .next = self .head
83
+ assert self .tail is not None # List is not empty, tail exists
83
84
self .head = self .tail .next = new_node
84
85
else :
85
- temp = self .head
86
+ temp : Node | None = self .head
86
87
for _ in range (index - 1 ):
88
+ assert temp is not None
87
89
temp = temp .next
90
+ assert temp is not None
88
91
new_node .next = temp .next
89
92
temp .next = new_node
90
93
if index == len (self ) - 1 : # Insert at the tail
@@ -120,16 +123,21 @@ def delete_nth(self, index: int = 0) -> Any:
120
123
"""
121
124
if not 0 <= index < len (self ):
122
125
raise IndexError ("list index out of range." )
123
- delete_node = self .head
126
+
127
+ assert self .head is not None and self .tail is not None
128
+ delete_node : Node = self .head
124
129
if self .head == self .tail : # Just one node
125
130
self .head = self .tail = None
126
131
elif index == 0 : # Delete head node
132
+ assert self .tail .next is not None
127
133
self .tail .next = self .tail .next .next
128
134
self .head = self .head .next
129
135
else :
130
- temp = self .head
136
+ temp : Node | None = self .head
131
137
for _ in range (index - 1 ):
138
+ assert temp is not None
132
139
temp = temp .next
140
+ assert temp is not None and temp .next is not None
133
141
delete_node = temp .next
134
142
temp .next = temp .next .next
135
143
if index == len (self ) - 1 : # Delete at tail
0 commit comments