Skip to content

Commit 4235c7a

Browse files
Built Linked List functionality
1 parent 91c217f commit 4235c7a

File tree

7 files changed

+173
-3
lines changed

7 files changed

+173
-3
lines changed

.idea/.gitignore

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/Sorting-Alg-Visualizations.iml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/profiles_settings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LinkedList.py

Lines changed: 135 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,135 @@
1-
class LinkedList():
2-
def __init__(self):
3-
pass
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.next = None
5+
6+
7+
class LinkedList:
8+
def __init__(self, value):
9+
new_node = Node(value)
10+
self.head = new_node
11+
self.tail = new_node
12+
self.length = 1
13+
14+
def print_list(self):
15+
temp = self.head
16+
while temp is not None:
17+
print(temp.value)
18+
temp = temp.next
19+
20+
def append(self, value):
21+
# appending is O(1) due to the simple changing of tail pointer
22+
new_node = Node(value)
23+
if self.head is None:
24+
self.head = new_node
25+
self.tail = new_node
26+
else:
27+
self.tail.next = new_node
28+
self.tail = new_node
29+
self.length += 1
30+
return True
31+
32+
def pop(self):
33+
# popping is O(n) because you need to iterate through the list to find the second to last value
34+
if self.head is None:
35+
return None
36+
elif self.length == 1:
37+
right = self.head
38+
self.head = None
39+
self.tail = None
40+
else:
41+
left, right = self.head, self.head.next
42+
while right is not self.tail:
43+
left = left.next
44+
right = right.next
45+
self.tail = left
46+
self.tail.next = None
47+
self.length -= 1
48+
return right
49+
50+
def prepend(self, value):
51+
# O(1)
52+
new_node = Node(value)
53+
new_node.next = self.head
54+
self.head = new_node
55+
if self.tail is None:
56+
self.tail = new_node
57+
self.length += 1
58+
return True
59+
60+
def pop_first(self):
61+
# O(1) since the second element is easily accessible
62+
temp = self.head
63+
if self.head is None:
64+
return None
65+
elif self.length == 1:
66+
self.head = None
67+
self.tail = None
68+
else:
69+
self.head = self.head.next
70+
temp.next = None
71+
self.length -= 1
72+
return temp
73+
74+
def get(self, index):
75+
# O(n)
76+
if index < 0 or index >= self.length:
77+
return None
78+
79+
current = self.head
80+
for _ in range(index):
81+
current = current.next
82+
return current
83+
84+
def set_value(self, index, value):
85+
node = self.get(index)
86+
if node:
87+
node.value = value
88+
return True
89+
return False
90+
91+
def insert(self, index, value):
92+
# O(n) to iterate through the list
93+
left = self.get(index-1)
94+
if index == 0:
95+
return self.prepend(value)
96+
elif index == self.length:
97+
return self.append(value)
98+
elif left:
99+
new_node = Node(value)
100+
new_node.next = left.next
101+
left.next = new_node
102+
self.length += 1
103+
return True
104+
return False
105+
106+
def remove(self, index):
107+
# O(n) to find item
108+
if index == 0:
109+
return self.pop_first()
110+
elif index == self.length - 1:
111+
return self.pop()
112+
elif index < 0 or index >= self.length:
113+
return None
114+
left = self.get(index-1)
115+
right = left.next
116+
left.next = right.next
117+
right.next = None
118+
self.length -= 1
119+
return True
120+
121+
def reverse(self):
122+
if self.head is None:
123+
return None
124+
elif self.length == 1:
125+
return True
126+
temp = self.head
127+
self.head = self.tail
128+
self.tail = temp
129+
right = temp.next
130+
left = None
131+
for _ in range(self.length):
132+
right = temp.next
133+
temp.next = left
134+
left = temp
135+
temp = right

0 commit comments

Comments
 (0)