@@ -6,6 +6,9 @@ def __init__(self, data):
66 self .data = data
77 self .next = None
88
9+ def __str__ (self ):
10+ return f'data: { self .data } '
11+
912
1013class SinglyLinkedList :
1114
@@ -14,44 +17,58 @@ def __init__(self) -> None:
1417 self .__tail = None
1518 self .__size = 0
1619
17- def __set_new_head (self , node : Node ) -> None :
18- self .__head = node
20+ def size (self ) -> int :
21+ return self .__size
1922
20- def __set_new_tail (self , node : Node ) -> None :
21- self .__tail = node
23+ def __update_size (self ) -> None :
24+ self .__size += 1
25+
26+ def insure_index (self , index : int ) -> None :
27+ if index > self .size () - 1 :
28+ raise IndexError
2229
2330 def head (self ) -> Node :
2431 return self .__head
2532
2633 def tail (self ) -> Node :
2734 return self .__tail
2835
29- def __update_size (self ) -> None :
30- self .__size += 1
31-
32- def size (self ) -> int :
33- return self .__size
36+ def __set_head (self , node : Node ) -> None :
37+ self .__head = node
3438
35- def insure_index (self , index : int ) -> None :
36- try :
37- if index > self .size ():
38- raise IndexError
39- except ValueError :
40- raise IndexError
39+ def __set_tail (self , node : Node ) -> None :
40+ self .__tail = node
4141
4242 def append (self , data : Any ) -> None :
4343 new_node = Node (data = data )
44+
4445 if self .head () is None :
45- self .__set_new_head (node = new_node )
46+ self .__set_head (node = new_node )
4647
4748 if self .tail () is None :
48- self .__set_new_tail (node = new_node )
49+ self .__set_tail (node = new_node )
4950 else :
5051 self .tail ().next = new_node
51- self .__set_new_tail (node = new_node )
52+ self .__set_tail (node = new_node )
5253
5354 self .__update_size ()
5455
56+ def get_node (self , index : int ) -> Node :
57+ self .insure_index (index = index )
58+
59+ count = 0
60+ current = self .head ()
61+
62+ while index != count :
63+ current = current .next
64+ count += 1
65+
66+ return current
67+
68+ def get (self , index : int ) -> Any :
69+ node = self .get_node (index = index )
70+ return node .data
71+
5572 def set (self , index : int , data : Any ) -> None :
5673 self .insure_index (index = index )
5774
@@ -76,13 +93,13 @@ def remove(self, index: int) -> None:
7693 current = current .next
7794 count += 1
7895
79- previous .next = current .next
96+ if previous :
97+ previous .next = current .next
98+ else :
99+ self .__set_head (current .next )
80100 del current
81101
82- def pop (self , index : Optional [int ] = None ) -> Any :
83- if index is None :
84- index = self .size () - 1
85-
102+ def pop (self , index : int = 0 ) -> Any :
86103 self .insure_index (index = index )
87104
88105 count = 0
@@ -95,38 +112,34 @@ def pop(self, index: Optional[int] = None) -> Any:
95112 count += 1
96113
97114 if previous :
98- if current .next :
99- previous .next = current .next
100- else :
101- self .__set_new_tail (node = previous )
102- previous .next = None
115+ previous .next = current .next
103116 else :
104- self .__set_new_head (node = current )
117+ self .__set_head (node = current . next )
105118
106119 data = current .data
107120 del current
108-
109121 return data
110122
111- def print_list (self ) -> None :
123+ def __str__ (self ) -> str :
124+ my_list = []
125+
112126 current = self .head ()
127+
113128 while current :
114- print (current .data )
129+ my_list . append (current .data )
115130 current = current .next
116131
132+ return str (my_list )
133+
117134
118135if __name__ == '__main__' :
119136 singly_list = SinglyLinkedList ()
120137 singly_list .append (data = 'eggs' )
121138 singly_list .append (data = 'bread' )
122139 singly_list .append (data = 'cereal' )
123- print (singly_list .size ())
124- # singly_list.print_list()
125- # singly_list.set(index=1, data='boobs')
126- # singly_list.print_list()
127- print ('--------------------------' )
128- print (singly_list .pop ())
129- print (singly_list .pop (index = 0 ))
130- print ('-----------------------' )
131- # singly_list.remove(index=5)
132- singly_list .print_list ()
140+ singly_list .set (index = 0 , data = 'boobs' )
141+ # singly_list.remove(3)
142+ singly_list .pop ()
143+ singly_list .pop ()
144+ print (singly_list )
145+
0 commit comments