-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdouble linked list.py
179 lines (151 loc) · 4.59 KB
/
double linked list.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#creating double linked list
from __future__ import print_function
#creating class node
class Node():
def __init__(self,data=None,prev=None,next=None):
self.data=data
self.prev=prev
self.next=next
#creating class double linked list
class doubleLinkedList():
def __init__ (self,name="Unknown DLL",head=None):
self.name=name
self.head=None
#inserting elements to dll
def insert_at_beginning(self,new_data):
if self.head is None:
new_node=Node(new_data)
self.head=new_node
new_node.next=None
new_node.prev=None
return
first_node = self.head
new_node=Node(new_data)
new_node.next=first_node
first_node.prev=new_node
self.head=new_node
new_node.prev=None
first_node.next=new_node.next.next
#inserting at end
def insert_at_end(self,new_data):
#length1=self.get_length()
if self.head is None :
self.insert_at_beginning(new_data)
return
first_node=self.head
new_node=Node(new_data)
while first_node.next:
first_node=first_node.next
first_node.next=new_node
new_node.prev=first_node
new_node.next=None
#inserting at middle
def insert_at_middle(self,index,new_data):
if index < 0:
raise Exception("INVALID INDEX")
return
if index>self.get_length():
raise Exception("INVALID INDEX")
return
if self.head is None and index == 0:
self.insert_at_beginning(new_data)
return
if index == 0:
self.insert_at_beginning(new_data)
return
elif index == self.get_length():
self.insert_at_end(new_data)
return
first_node = self.head
count=0
nxt=first_node.next
new_node=Node(new_data)
while first_node.next:
if count == index-1:
new_node.prev=first_node.next
first_node.next=new_node
new_node.next=new_node.prev
first_node=first_node.next
count+=1
#deletining elements
#deleting an element at beginning
def removing_an_element_at_beg(self):
n=self.name
if self.head is None:
print("Removing from {} is NOt Possible".format(n))
return
first_node=self.head
nxt=first_node.next
prev=first_node.prev
self.head=nxt
nxt.prev =None
#deleting an element at ending
def removing_an_element_at_end(self):
n=self.name
length1=self.get_length()
#print("length of dll is {}".format(length1))
if self.head is None:
print("Removing from {} is NOt Possible".format(n))
return
if length1 == 1:
self.removing_an_element_at_beg()
return
first_node=self.head
nxt=first_node.next
prev=first_node.prev
length2=length1-2
#print(length2)
count=0
while first_node.next:
if count == length2:
first_node.next=nxt.next
nxt.prev=None
nxt.next=None
break
first_node=first_node.next
count+=1
#get length of dll
def get_length(self):
n=self.name
if self.head is None:
print("{0} is EMPTY DLL".format(n))
return
first_node=self.head
count=0
while first_node:
first_node=first_node.next
count+=1
#print("The length of the DLL is {}".format(count))
return count
#printing dll
def print_dll(self):
n=self.name
if self.head is None:
print("{0} is EMPTY DLL".format(n))
return
first_node=self.head
string=""
while first_node:
string=str(first_node.data)+" ---> "
first_node=first_node.next
print(string,end=" ")
print()
if __name__=="__main__":
d1=doubleLinkedList("First DLL")
d1.insert_at_beginning(45)
d1.insert_at_beginning(44)
d1.insert_at_beginning(43)
d1.insert_at_end(46)
d1.insert_at_end(48)
d1.insert_at_middle(4,47)
d1.print_dll()
#d1.removing_an_element_at_beg()
d1.removing_an_element_at_end()
d1.print_dll()
d2=doubleLinkedList("Second DLL")
d2.insert_at_end(85)
d2.insert_at_end(86)
d2.insert_at_end(87)
d2.print_dll()
d2.removing_an_element_at_beg()
d2.print_dll()