-
Notifications
You must be signed in to change notification settings - Fork 0
/
SinglyLinkedList.py
95 lines (80 loc) · 2.17 KB
/
SinglyLinkedList.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import sys
class SLL_Node:
def __init__(self, val):
self.value = val
self.next = None
class SinglyLinkedList:
def __init__(self):
self.length = 0
self.head = None
self.tail = None
def append(self, value):
newNode = SLL_Node(value)
if self.length == 0:
self.head = newNode
self.tail = self.head
self.length = 1
else:
self.tail.next = newNode
self.tail = newNode
self.length += 1
return self
def pop(self, node=None) -> SLL_Node:
if self.head is None: return None
current = self.head
newTail = current
while current.next:
newTail = current
current = current.next
self.tail = newTail
self.tail.next = None
self.length -= 1
return current # Removed item
def popZero(self):
if self.length == 0: return None
currentHead = self.head
self.head = currentHead.next
currentHeadVal = currentHead.value
del currentHead
self.length -= 1
return currentHeadVal
def insertZero(self, value):
if self.length == 0:
self.append(value)
else:
newNode = SLL_Node(value)
newNode.next = self.head
self.head = newNode
self.length += 1
return self
def get(self, index):
if index < 0 or index >= self.length: return None
counter = 0
current = self.head
while counter < index:
current = current.next
counter += 1
return current.value
def printList(self):
current = self.head
while current:
print(current.value)
current = current.next
print('')
ssList = SinglyLinkedList()
ssList.append(1)
ssList.append(2)
ssList.append(3)
ssList.printList()
removed = ssList.pop()
ssList.printList()
print(f'popped: {removed.value}')
ssList.append(4)
ssList.printList()
removedZ = ssList.popZero()
ssList.printList()
print(removedZ, '\n')
ssList.insertZero('z')
ssList.printList()
getVal = ssList.get(2)
print(f'GetValue: {getVal}')