-
Notifications
You must be signed in to change notification settings - Fork 13
/
DoublyLinkedList.py
141 lines (127 loc) · 4.36 KB
/
DoublyLinkedList.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# Created by Elshad Karimov on 05/05/2020.
# Copyright © 2020 AppMillers. All rights reserved.
class Node:
def __init__(self, value=None):
self.value = value
self.next = None
self.prev = None
class DoublyLinkedList:
def __init__(self):
self.head = None
self.tail = None
def __iter__(self):
node = self.head
while node:
yield node
node = node.next
# Creation of Doubly Linked List
def createDLL(self, nodeValue):
node = Node(nodeValue)
node.prev = None
node.next = None
self.head = node
self.tail = node
return "The DLL is created Successfully"
# Insertion Method in Doubly Linked List
def insertNode(self, nodeValue, location):
if self.head is None:
print("The node cannot be inserted")
else:
newNode = Node(nodeValue)
if location == 0:
newNode.prev = None
newNode.next = self.head
self.head.prev = newNode
self.head = newNode
elif location == 1:
newNode.next = None
newNode.prev = self.tail
self.tail.next = newNode
self.tail = newNode
else:
tempNode = self.head
index = 0
while index < location - 1:
tempNode = tempNode.next
index += 1
newNode.next = tempNode.next
newNode.prev = tempNode
newNode.next.prev = newNode
tempNode.next = newNode
# Traversal Method in Doubly Linked List
def traverseDLL(self):
if self.head is None:
print("There is not any element to traverse")
else:
tempNode = self.head
while tempNode:
print(tempNode.value)
tempNode = tempNode.next
# Reverse Traversal Method in Doubly Linked List
def reverseTraversalDLL(self):
if self.head is None:
print("There is not any element to traverse")
else:
tempNode = self.tail
while tempNode:
print(tempNode.value)
tempNode = tempNode.prev
# Search Method in Doubly Linked List
def searchDLL(self, nodeValue):
if self.head is None:
return "There is not any element in the list"
else:
tempNode = self.head
while tempNode:
if tempNode.value == nodeValue:
return tempNode.value
tempNode = tempNode.next
return "The node does not exist in this list"
# Delete a node from Doubly Linked List
def deleteNode(self,location):
if self.head is None:
print("There is not any element in DLL")
else:
if location == 0:
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.head = self.head.next
self.head.prev = None
elif location == 1:
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.tail = self.tail.prev
self.tail.next = None
else:
curNode = self.head
index = 0
while index < location - 1:
curNode = curNode.next
index += 1
curNode.next = curNode.next.next
curNode.next.prev = curNode
print("The node has been successfully deleted")
# Delete entire Doubly Linked List
def deleteDLL(self):
if self.head is None:
print("There is not any node in DLL")
else:
tempNode = self.head
while tempNode:
tempNode.prev = None
tempNode = tempNode.next
self.head = None
self.tail = None
print("The DLL has been successfully deleted")
doubyLL = DoublyLinkedList()
doubyLL.createDLL(5)
doubyLL.insertNode(0,0)
doubyLL.insertNode(2,1)
doubyLL.insertNode(6,2)
print([node.value for node in doubyLL])
doubyLL.deleteDLL()
print([node.value for node in doubyLL])