Skip to content

Commit a84304c

Browse files
committed
implemented linked_list.py
1 parent e718fb4 commit a84304c

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
class Node:
2+
__slots__ = ('value', 'next', 'previous')
3+
4+
def __init__(self, value):
5+
self.value = value
6+
self.next = None
7+
self.previous = None
8+
9+
10+
class LinkedList:
11+
def __init__(self):
12+
self.head = None
13+
self.tail = None
14+
15+
def push_head(self, value):
16+
node = Node(value)
17+
if self.head is None:
18+
self.head = node
19+
self.tail = node
20+
else:
21+
node.next = self.head
22+
self.head.previous = node
23+
self.head = node
24+
return node
25+
26+
def pop_tail(self):
27+
if self.tail is None:
28+
raise IndexError('pop from empty list')
29+
node = self.tail
30+
value = node.value
31+
if node.previous is None:
32+
self.head = None
33+
self.tail = None
34+
else:
35+
self.tail = node.previous
36+
self.tail.next = None
37+
node.previous = None
38+
node.next = None
39+
return value
40+
41+
def remove(self, node):
42+
if node.previous is not None:
43+
node.previous.next = node.next
44+
else:
45+
self.head = node.next
46+
47+
if node.next is not None:
48+
node.next.previous = node.previous
49+
else:
50+
self.tail = node.previous
51+
52+
node.next = None
53+
node.previous = None

0 commit comments

Comments
 (0)