Skip to content

Commit f65bc20

Browse files
committed
Three Hundred - Eight Commit: Implement LinkedList class
1 parent ec5fa7e commit f65bc20

File tree

1 file changed

+120
-0
lines changed

1 file changed

+120
-0
lines changed
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Node Class
2+
# ==========
3+
class _Node(object):
4+
__slots__ = '_element', '_next'
5+
6+
# Constructor
7+
def __init__(self, element, next):
8+
self._element = element
9+
self._next = next
10+
11+
12+
# Linked List Class
13+
# ===========
14+
class LinkedList:
15+
# Constructor
16+
def __init__(self):
17+
self._head = None
18+
self._tail = None
19+
self._size = 0
20+
21+
# Find length of the Linked List
22+
def __len__(self):
23+
return self._size
24+
25+
# Check whether Linked List is empty
26+
def is_empty(self):
27+
return self._size == 0
28+
29+
# Add Nodes to the back of the Linked List
30+
def add_last(self, e):
31+
newest = _Node(e, None)
32+
if self.is_empty():
33+
self._head = newest
34+
else:
35+
self._tail._next = newest
36+
self._tail = newest
37+
self._size += 1
38+
39+
# Traverse the Linked List and display elements
40+
def display(self):
41+
p = self._head
42+
while p:
43+
print(p._element, end=' --> ')
44+
p = p._next
45+
print()
46+
47+
# Search for an element in a Linked List
48+
def search(self, key):
49+
p = self._head
50+
index = 0
51+
while p:
52+
if p._element == key:
53+
return index
54+
p = p._next
55+
index += 1
56+
return -1
57+
58+
# Add Nodes to the front of the Linked List
59+
def add_first(self, key):
60+
newest = _Node(key, None)
61+
if self.is_empty():
62+
self._head = newest
63+
self._tail = newest
64+
else:
65+
newest._next = self._head
66+
self._head = newest
67+
self._size += 1
68+
69+
# Add Nodes to any position in a Linked List
70+
def add_any(self, key, position):
71+
newest = _Node(key, None)
72+
p = self._head
73+
i = 1
74+
while i < position - 1:
75+
p = p._next
76+
i = i + 1
77+
newest._next = p._next
78+
p._next = newest
79+
self._size += 1
80+
81+
# Remove an element from the beginning of a Linked List
82+
def remove_first(self):
83+
if self.is_empty():
84+
print('List is empty')
85+
return
86+
e = self._head._element
87+
self._head = self._head._next
88+
self._size -= 1
89+
if self.is_empty():
90+
self._tail = None
91+
return e
92+
93+
# Remove an element from the end of a Linked List
94+
def remove_last(self):
95+
if self.is_empty():
96+
print('List is empty')
97+
return
98+
p = self._head
99+
i = 1
100+
while i < len(self) - 1:
101+
p = p._next
102+
i = i + 1
103+
self._tail = p
104+
p = p._next
105+
e = p._element
106+
self._tail._next = None
107+
self._size -= 1
108+
return e
109+
110+
# Remove an element at any position in a Linked List
111+
def remove_any(self, position):
112+
p = self._head
113+
i = 1
114+
while i < position - 1:
115+
p = p._next
116+
i = i + 1
117+
e = p._next._element
118+
p._next = p._next._next
119+
self._size -= 1
120+
return e

0 commit comments

Comments
 (0)