Skip to content

Commit 40b89a3

Browse files
committed
solve linked lists exercise
1 parent cdf5bbc commit 40b89a3

File tree

3 files changed

+267
-0
lines changed

3 files changed

+267
-0
lines changed

.vscode/launch.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Python: Current File",
9+
"type": "python",
10+
"request": "launch",
11+
"program": "${file}",
12+
"console": "integratedTerminal"
13+
}
14+
]
15+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
class Node:
2+
def __init__(self,data = None, next = None, prev = None):
3+
self.data = data
4+
self.next = next
5+
self.prev = prev
6+
7+
class DoublyLinkedList():
8+
def __init__(self):
9+
self.head = None
10+
11+
def printForward(self):
12+
if self.head is None:
13+
print("Emty doubly List")
14+
return
15+
16+
itr = self.head
17+
forwardll = ""
18+
while itr:
19+
forwardll += str(itr.data) + "--->"
20+
itr = itr.next
21+
22+
print(forwardll)
23+
24+
def printBackWard(self):
25+
if self.lastNode() is None:
26+
print("Empty doubly List")
27+
return
28+
29+
backwardll= ""
30+
itr =self.lastNode()
31+
while itr:
32+
backwardll += str(itr.data) + "-->"
33+
itr = itr.prev
34+
35+
print("Reverse Linked List:",backwardll)
36+
37+
def lastNode(self):
38+
itr = self.head
39+
while itr.next:
40+
itr = itr.next
41+
return itr
42+
43+
def getLength(self):
44+
count = 0
45+
itr = self.head
46+
while itr:
47+
count += 1
48+
itr = itr.next
49+
return count
50+
51+
def insertLinkedList(self, dataList):
52+
self.head = None
53+
for data in dataList:
54+
self.insertAtEnd(data)
55+
56+
def insertAtEnd(self, data):
57+
if self.head is None:
58+
self.head = Node(data,None,None)
59+
return
60+
61+
itr = self.head
62+
63+
while itr.next:
64+
itr= itr.next
65+
66+
itr.next = Node(data,None,itr)
67+
68+
def inserAtBeginning(self,data):
69+
if self.head is None:
70+
node = Node(data,self.head,None)
71+
self.head = Node
72+
else:
73+
node = Node(data,self.head,None)
74+
self.head.prev = node
75+
self.head = node
76+
77+
def insertAtIndex(self, index, value):
78+
if index < 0 or index > self.getLength():
79+
raise Exception("invalid index")
80+
81+
if index == 0:
82+
self.inserAtBeginning(value)
83+
return
84+
85+
itr = self.head
86+
count = 1
87+
while itr:
88+
if count == index:
89+
node = Node(value,itr.next,itr)
90+
if node.next:
91+
node.next.prev = node
92+
itr.next = node
93+
break
94+
95+
itr = itr.next
96+
count += 1
97+
98+
def main():
99+
ll = DoublyLinkedList()
100+
ll.insertLinkedList(["banana","mango","grapes","orange"])
101+
# ll.printForward()
102+
# print(ll.getLength())
103+
# ll.printBackWard()
104+
ll.insertAtEnd("figs")
105+
# ll.printForward()
106+
# ll.printBackWard()
107+
ll.insertAtIndex(4,"kiwi")
108+
ll.insertAtIndex(0,"jackfruit")
109+
ll.insertAtIndex(6,"dates")
110+
ll.printForward()
111+
ll.printBackWard()
112+
113+
if __name__ == "__main__":
114+
main()
Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import json
2+
3+
class Node:
4+
def __init__(self,data=None,next=None):
5+
self.data = data
6+
self.next = next
7+
8+
class linkedList:
9+
def __init__(self):
10+
self.head = None
11+
12+
def insertAtBeginning(self, data):
13+
node = Node(data,self.head)
14+
self.head = node
15+
16+
def insertAtEnd(self, data):
17+
if self.head is None:
18+
self.head = Node(data,None)
19+
return
20+
21+
itr = self.head
22+
while itr.next:
23+
itr = itr.next
24+
25+
itr.next = Node(data,None)
26+
27+
def printLinkedList(self):
28+
if self.head is None:
29+
print("linked list is empty")
30+
return
31+
32+
itr = self.head
33+
llstr = ''
34+
while itr:
35+
llstr += str(itr.data) + "-->"
36+
itr =itr.next
37+
38+
print(llstr)
39+
40+
def inserValues(self, dataList):
41+
self.head =None
42+
for data in dataList:
43+
self.insertAtEnd(data)
44+
45+
def getLength(self):
46+
itr = self.head
47+
count = 0
48+
while itr:
49+
count += 1
50+
itr = itr.next
51+
return count
52+
53+
def removeItem(self, index):
54+
if index < 0 or index >= self.getLength():
55+
raise Exception("invalid index")
56+
57+
if index == 0:
58+
self.head = self.head.next
59+
return
60+
61+
count = 0
62+
itr = self.head
63+
while itr:
64+
if count == index -1 :
65+
itr.next = itr.next.next
66+
67+
itr = itr.next
68+
count += 1
69+
70+
def insertAt(self, index, value):
71+
if index < 0 or index >= self.getLength():
72+
raise Exception("invalid index")
73+
74+
if index == 0:
75+
self.insertAtBeginning(value)
76+
return
77+
78+
count = 0
79+
itr = self.head
80+
while itr:
81+
if count == index -1 :
82+
node = Node(value,itr.next)
83+
itr.next = node
84+
break
85+
86+
itr = itr.next
87+
count += 1
88+
89+
def insertAfterValues(self, currentData, insertValue):
90+
count = 0
91+
itr = self.head
92+
while itr:
93+
if currentData == itr.data:
94+
node = Node(insertValue,itr.next)
95+
itr.next = node
96+
break
97+
98+
itr = itr.next
99+
count += 1
100+
101+
def removeValue(self,value):
102+
if self.head is None:
103+
return
104+
105+
if self.head.data == value:
106+
self.head = self.head.next
107+
return
108+
109+
count = 0
110+
itr = self.head
111+
while itr.next:
112+
if itr.next.data == value:
113+
itr.next = itr.next.next
114+
115+
itr = itr.next
116+
count += 1
117+
118+
def main():
119+
ll = linkedList()
120+
# print(ll.getLength())
121+
# ll.inserValues(['tung','trang','erererer'])
122+
# print(ll.getLength())
123+
# ll.printLinkedList()
124+
# ll.removeItem(0)
125+
# ll.printLinkedList()
126+
# ll.insertAt(1,"hot boi")
127+
# ll.printLinkedList()
128+
ll.inserValues(["banana","mango","grapes","orange"])
129+
ll.printLinkedList()
130+
ll.insertAfterValues("orange","apple") # insert apple after mango
131+
ll.printLinkedList()
132+
ll.removeValue("orange") # remove orange from linked list
133+
ll.removeValue("banana") # remove orange from linked list
134+
ll.printLinkedList()
135+
136+
137+
if __name__ == "__main__":
138+
main()

0 commit comments

Comments
 (0)