Skip to content

Commit 1f19d92

Browse files
added code for the linked list
1 parent 134e683 commit 1f19d92

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
.DS_Store
22
node_modules
3-
.venv
3+
venv
44
__pycache__
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
class LinkedList:
2+
class Node:
3+
def __init__(self, value):
4+
self.value = value
5+
self.next = None
6+
self.previous = None
7+
8+
def __init__(self):
9+
self.head = None
10+
self.tail = None
11+
12+
def push_head(self, value):
13+
"""Add an element to the start of the list. Returns a handle to the node."""
14+
new_node = self.Node(value)
15+
16+
if self.head is None:
17+
# List is empty
18+
self.head = new_node
19+
self.tail = new_node
20+
else:
21+
# Add to front
22+
new_node.next = self.head
23+
self.head.previous = new_node
24+
self.head = new_node
25+
26+
return new_node
27+
28+
def pop_tail(self):
29+
"""Remove and return the element from the end of the list."""
30+
if self.tail is None:
31+
raise IndexError("pop from empty list")
32+
33+
value = self.tail.value
34+
35+
if self.head == self.tail:
36+
# Only one element
37+
self.head = None
38+
self.tail = None
39+
else:
40+
# Multiple elements
41+
self.tail = self.tail.previous
42+
self.tail.next = None
43+
44+
return value
45+
46+
def remove(self, node):
47+
"""Remove a specific node from the list using the handle from push_head."""
48+
if node is None:
49+
return
50+
51+
if node.previous is not None:
52+
node.previous.next = node.next
53+
else:
54+
# node is head
55+
self.head = node.next
56+
57+
if node.next is not None:
58+
node.next.previous = node.previous
59+
else:
60+
# node is tail
61+
self.tail = node.previous
62+
63+
# Clean up references
64+
node.next = None
65+
node.previous = None

0 commit comments

Comments
 (0)