-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdoublyLinkedList.py
141 lines (125 loc) · 4.05 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
# Doubly Linked List implementation
# Create, Insert, Traverse, Search, Delete operations
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
# Create
def createDoublyLL(self, nodeValue):
node = Node(nodeValue)
node.prev = None
node.next = None
self.head = node
self.tail = node
return "The DoublyLL is created"
# Insert
def insertDoublyLL(self, nodeValue, location):
if self.head is None:
return "There is not any element in the list"
else:
newNode = Node(nodeValue)
# Beginning
if location == 0:
newNode.prev = None
newNode.next = self.head
self.head.prev = newNode
self.head = newNode
# End
elif location == 1:
newNode.next = None
newNode.prev = self.tail
self.tail.next = newNode
self.tail = newNode
# Middle
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
# Traverse
def traverseDoublyLL(self):
if self.head is None:
return "There is not any element in the list"
else:
tempNode = self.head
while tempNode:
print(tempNode.value)
tempNode = tempNode.next
# Reverse Traverse
def reverseTraverseDoublyLL(self):
if self.head is None:
return "There is not any element in the list"
else:
tempNode = self.tail
while tempNode:
print(tempNode.value)
tempNode = tempNode.prev
# Search
def searchDoublyLL(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"
# Delete
def delete(self, location):
if self.head is None:
return "There is not any element in the list"
else:
# Beginning
if location == 0:
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.head = self.head.next
self.head.prev = None
# End
elif location == 1:
if self.head == self.tail:
self.head = None
self.tail = None
else:
self.tail = self.tail.prev
self.tail.next = None
# Middle
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 is deleted")
# Delete Entire DoublyLL
def deleteEntireDoublyLL(self):
if self.head is None:
return "There is not any element in the list"
else:
tempNode = self.head
while tempNode:
tempNode.prev = None
tempNode = tempNode.next
self.head = None
self.tail = None
print("The DLL has been deleted")