Skip to content

Commit b3f3841

Browse files
committed
improving single linked list example
1 parent 85a7624 commit b3f3841

File tree

1 file changed

+55
-42
lines changed

1 file changed

+55
-42
lines changed

5_singly_linked_list_example.py

Lines changed: 55 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -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

1013
class 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

118135
if __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

Comments
 (0)