Skip to content

Commit 46900cb

Browse files
committed
Added Doubly Linked List
1 parent 4a6894c commit 46900cb

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
'''
2+
- A linked list is similar to an array, it holds values. However, links in a linked list do not have indexes.
3+
- This is an example of a double ended, doubly linked list.
4+
- Each link references the next link and the previous one.
5+
'''
6+
class LinkedList:
7+
def __init__(self):
8+
self.head = None
9+
self.tail = None
10+
11+
def insertHead(self, x):
12+
newLink = Link(x) #Create a new link with a value attached to it
13+
if(self.isEmpty() == True): #Set the first element added to be the tail
14+
self.tail = newLink
15+
else:
16+
self.head.previous = newLink # newLink <-- currenthead(head)
17+
newLink.next = self.head # newLink <--> currenthead(head)
18+
self.head = newLink # newLink(head) <--> oldhead
19+
20+
def deleteHead(self):
21+
temp = self.head
22+
self.head = self.head.next # oldHead <--> 2ndElement(head)
23+
self.head.previous = None # oldHead --> 2ndElement(head) nothing pointing at it so the old head will be removed
24+
if(self.head == None):
25+
self.tail = None
26+
return temp
27+
28+
def insertTail(self, x):
29+
newLink = Link(x)
30+
newLink.next = None # currentTail(tail) newLink -->
31+
self.tail.next = newLink # currentTail(tail) --> newLink -->
32+
newLink.previous = self.tail #currentTail(tail) <--> newLink -->
33+
self.tail = newLink # oldTail <--> newLink(tail) -->
34+
35+
def deleteTail(self):
36+
temp = self.tail
37+
self.tail = self.tail.previous # 2ndLast(tail) <--> oldTail --> None
38+
self.tail.next = None # 2ndlast(tail) --> None
39+
return temp
40+
41+
def delete(self, x):
42+
current = self.head
43+
44+
while(current.value != x): # Find the position to delete
45+
current = current.next
46+
47+
if(current == self.head):
48+
self.deleteHead()
49+
50+
elif(current == self.tail):
51+
self.deleteTail()
52+
53+
else: #Before: 1 <--> 2(current) <--> 3
54+
current.previous.next = current.next # 1 --> 3
55+
current.next.previous = current.previous # 1 <--> 3
56+
57+
def isEmpty(self): #Will return True if the list is empty
58+
return(self.head == None)
59+
60+
def display(self): #Prints contents of the list
61+
current = self.head
62+
while(current != None):
63+
current.displayLink()
64+
current = current.next
65+
print()
66+
67+
class Link:
68+
next = None #This points to the link in front of the new link
69+
previous = None #This points to the link behind the new link
70+
def __init__(self, x):
71+
self.value = x
72+
def displayLink(self):
73+
print("{}".format(self.value), end=" ")

0 commit comments

Comments
 (0)