Skip to content

Commit 6abf684

Browse files
committed
OOPs completed and LL is started
1 parent 61035c3 commit 6abf684

5 files changed

+624
-0
lines changed

.DS_Store

0 Bytes
Binary file not shown.
+164
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
# Created by Elshad Karimov on 12/05/2020.
2+
# Copyright © 2020 AppMillers. All rights reserved.
3+
4+
class Node:
5+
def __init__(self, value=None):
6+
self.value = value
7+
self.next = None
8+
self.prev = None
9+
10+
class CircularDoublyLinkedList:
11+
def __init__(self):
12+
self.head = None
13+
self.tail = None
14+
15+
16+
def __iter__(self):
17+
node = self.head
18+
while node:
19+
yield node
20+
node = node.next
21+
if node == self.tail.next:
22+
break
23+
24+
# Creation of Circular Doubly Linked List
25+
def createCDLL(self, nodeValue):
26+
newNode = Node(nodeValue)
27+
self.head = newNode
28+
self.tail = newNode
29+
newNode.prev = newNode
30+
newNode.next = newNode
31+
return "The CDLL is created successfully"
32+
33+
34+
# Insertion Method in Circular Doubly Linked List
35+
def insertCDLL(self, value, location):
36+
if self.head is None:
37+
return "The CDLL does not exist"
38+
else:
39+
newNode = Node(value)
40+
if location == 0:
41+
newNode.next = self.head
42+
newNode.prev = self.tail
43+
self.head.prev = newNode
44+
self.head = newNode
45+
self.tail.next = newNode
46+
elif location == 1:
47+
newNode.next = self.head
48+
newNode.prev = self.tail
49+
self.head.prev = newNode
50+
self.tail.next = newNode
51+
self.tail = newNode
52+
else:
53+
tempNode = self.head
54+
index = 0
55+
while index < location - 1:
56+
tempNode = tempNode.next
57+
index += 1
58+
newNode.next = tempNode.next
59+
newNode.prev = tempNode
60+
newNode.next.prev = newNode
61+
tempNode.next = newNode
62+
return "The node has been successfully inserted"
63+
64+
# Traversal of Circular Doubly Linked List
65+
def traversalCDLL(self):
66+
if self.head is None:
67+
print("There is not any node for traversal")
68+
else:
69+
tempNode = self.head
70+
while tempNode:
71+
print(tempNode.value)
72+
if tempNode == self.tail:
73+
break
74+
tempNode = tempNode.next
75+
76+
# Reverse traversal of Circular Doubly Linked List
77+
def reverseTraversalCDLL(self):
78+
if self.head is None:
79+
print("There is not any node for reverse traversal")
80+
else:
81+
tempNode = self.tail
82+
while tempNode:
83+
print(tempNode.value)
84+
if tempNode == self.head:
85+
break
86+
tempNode = tempNode.prev
87+
88+
# Search Circular Doubly Linked List
89+
def searchCDLL(self, nodeValue):
90+
if self.head is None:
91+
return "There is not any node in CDLL"
92+
else:
93+
tempNode = self.head
94+
while tempNode:
95+
if tempNode.value == nodeValue:
96+
return tempNode.value
97+
if tempNode == self.tail:
98+
return "The value does not exist in CDLL"
99+
tempNode = tempNode.next
100+
101+
# Delete a node from Circular Doubly Linked List
102+
def deleteNode(self, location):
103+
if self.head is None:
104+
print("There is not any node to delete")
105+
else:
106+
if location == 0:
107+
if self.head == self.tail:
108+
self.head.prev = None
109+
self.head.next = None
110+
self.head = None
111+
self.tail = None
112+
else:
113+
self.head = self.head.next
114+
self.head.prev = self.tail
115+
self.tail.next = self.head
116+
elif location == 1:
117+
if self.head == self.tail:
118+
self.head.prev = None
119+
self.head.next = None
120+
self.head = None
121+
self.tail = None
122+
else:
123+
self.tail = self.tail.prev
124+
self.tail.next = self.head
125+
self.head.prev = self.tail
126+
else:
127+
curNode = self.head
128+
index = 0
129+
while index < location - 1:
130+
curNode = curNode.next
131+
index += 1
132+
curNode.next = curNode.next.next
133+
curNode.next.prev = curNode
134+
print("The node has been successfully deleted")
135+
136+
# Delete entire Circular Doubly Linked List
137+
def deleteCDLL(self):
138+
if self.head is None:
139+
print("There is not any element to delete")
140+
else:
141+
self.tail.next = None
142+
tempNode = self.head
143+
while tempNode:
144+
tempNode.prev = None
145+
tempNode = tempNode.next
146+
self.head = None
147+
self.tail = None
148+
print("The CDLL has been successfully deleted")
149+
150+
151+
152+
circularDLL = CircularDoublyLinkedList()
153+
circularDLL.createCDLL(5)
154+
circularDLL.insertCDLL(0,0)
155+
circularDLL.insertCDLL(1,1)
156+
circularDLL.insertCDLL(2,2)
157+
print([node.value for node in circularDLL])
158+
circularDLL.deleteCDLL()
159+
print([node.value for node in circularDLL])
160+
161+
162+
163+
164+
+145
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
# Created by Elshad Karimov on 01/05/2020.
2+
# Copyright © 2020 AppMillers. All rights reserved.
3+
4+
class Node:
5+
def __init__(self, value=None):
6+
self.value = value
7+
self.next = None
8+
9+
class CircularSinglyLinkedList:
10+
def __init__(self):
11+
self.head = None
12+
self.tail = None
13+
14+
def __iter__(self):
15+
node = self.head
16+
while node:
17+
yield node
18+
node = node.next
19+
if node == self.tail.next:
20+
break
21+
22+
23+
# Creation of circular singly linked list
24+
def createCSLL(self, nodeValue):
25+
node = Node(nodeValue)
26+
node.next = node
27+
self.head = node
28+
self.tail = node
29+
return "The CSLL has been created"
30+
31+
# Insertion of a node in circular singly linked list
32+
33+
def insertCSLL(self, value, location):
34+
if self.head is None:
35+
return "The head reference is None"
36+
else:
37+
newNode = Node(value)
38+
if location == 0:
39+
newNode.next = self.head
40+
self.head = newNode
41+
self.tail.next = newNode
42+
elif location == 1:
43+
newNode.next = self.tail.next
44+
self.tail.next = newNode
45+
self.tail = newNode
46+
else:
47+
tempNode = self.head
48+
index = 0
49+
while index < location - 1:
50+
tempNode = tempNode.next
51+
index += 1
52+
nextNode = tempNode.next
53+
tempNode.next = newNode
54+
newNode.next = nextNode
55+
return "The node has been successfully inserted"
56+
57+
# Traversal of a node in circular singly linked list
58+
def traversalCSLL(self):
59+
if self.head is None:
60+
print("There is not any element for traversal")
61+
else:
62+
tempNode = self.head
63+
while tempNode:
64+
print(tempNode.value)
65+
tempNode = tempNode.next
66+
if tempNode == self.tail.next:
67+
break
68+
69+
# Searching for a node in circular singly linked list
70+
def searchCSLL(self, nodeValue):
71+
if self.head is None:
72+
return "There is not any node in this CSLL"
73+
else:
74+
tempNode = self.head
75+
while tempNode:
76+
if tempNode.value == nodeValue:
77+
return tempNode.value
78+
tempNode = tempNode.next
79+
if tempNode == self.tail.next:
80+
return "The node does not exist in this CSLL"
81+
82+
# Delete a node from circular singly linked list
83+
def deleteNode(self, location):
84+
if self.head is None:
85+
print("There is not any node in CSLL")
86+
else:
87+
if location == 0:
88+
if self.head == self.tail:
89+
self.head.next = None
90+
self.head = None
91+
self.tail = None
92+
else:
93+
self.head = self.head.next
94+
self.tail.next = self.head
95+
elif location == 1:
96+
if self.head == self.tail:
97+
self.head.next = None
98+
self.head = None
99+
self.tail = None
100+
else:
101+
node = self.head
102+
while node is not None:
103+
if node.next == self.tail:
104+
break
105+
node = node.next
106+
node.next = self.head
107+
self.tail = node
108+
else:
109+
tempNode = self.head
110+
index = 0
111+
while index < location - 1:
112+
tempNode = tempNode.next
113+
index += 1
114+
nextNode = tempNode.next
115+
tempNode.next = nextNode.next
116+
117+
# Delete entire circular sinlgy linked list
118+
def deleteEntireCSLL(self):
119+
self.head = None
120+
self.tail.next = None
121+
self.tail = None
122+
123+
124+
125+
circularSLL = CircularSinglyLinkedList()
126+
circularSLL.createCSLL(0)
127+
circularSLL.insertCSLL(1,1)
128+
circularSLL.insertCSLL(2,1)
129+
circularSLL.insertCSLL(3,1)
130+
131+
print([node.value for node in circularSLL])
132+
circularSLL.deleteEntireCSLL()
133+
print([node.value for node in circularSLL])
134+
135+
136+
137+
138+
139+
140+
141+
142+
143+
144+
145+

0 commit comments

Comments
 (0)