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