From 4b82230d3c54571b8e5f47e5b0c62412550c2f72 Mon Sep 17 00:00:00 2001 From: Zobeir-Rigi Date: Mon, 6 Jul 2026 00:48:15 +0100 Subject: [PATCH 1/3] Implement linked list --- Sprint-2/implement_linked_list/linked_list.py | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index e69de29..0dfbb5c 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -0,0 +1,53 @@ +class Node: + def __init__(self, value): + self.value = value + self.next = None + self.previous = None + + +class LinkedList: + def __init__(self): + self.head = None + self.tail = None + + def push_head(self, value): + node = Node(value) + + if self.head is None: + self.head = node + self.tail = node + else: + node.next = self.head + self.head.previous = node + self.head = node + + return node + + def pop_tail(self): + if self.tail is None: + return None + + value = self.tail.value + + if self.head == self.tail: + self.head = None + self.tail = None + else: + self.tail = self.tail.previous + self.tail.next = None + + return value + + def remove(self, node): + if node.previous is not None: + node.previous.next = node.next + else: + self.head = node.next + + if node.next is not None: + node.next.previous = node.previous + else: + self.tail = node.previous + + node.next = None + node.previous = None \ No newline at end of file From 4b6da1249f16cdb0e0146edbd19b62ab308b943e Mon Sep 17 00:00:00 2001 From: Zobeir-Rigi Date: Tue, 14 Jul 2026 18:22:34 +0100 Subject: [PATCH 2/3] Refactor linked list implementation --- Sprint-2/implement_linked_list/linked_list.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 0dfbb5c..931fbf3 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -1,4 +1,6 @@ class Node: + __slots__ = ("value", "next", "previous") + def __init__(self, value): self.value = value self.next = None @@ -27,14 +29,10 @@ def pop_tail(self): if self.tail is None: return None - value = self.tail.value + node = self.tail + value = node.value - if self.head == self.tail: - self.head = None - self.tail = None - else: - self.tail = self.tail.previous - self.tail.next = None + self.remove(node) return value From bc6f068f3442b39ec70fe5918b73650eb188aeb5 Mon Sep 17 00:00:00 2001 From: Zobeir-Rigi Date: Tue, 14 Jul 2026 18:50:55 +0100 Subject: [PATCH 3/3] Refactor linked list implementation --- Sprint-2/implement_linked_list/linked_list.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 931fbf3..f0d39af 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -48,4 +48,21 @@ def remove(self, node): self.tail = node.previous node.next = None - node.previous = None \ No newline at end of file + node.previous = None + + def move_to_head(self, node): + if node == self.head: + return + + self.remove(node) + + node.previous = None + node.next = self.head + + if self.head is not None: + self.head.previous = node + + self.head = node + + if self.tail is None: + self.tail = node \ No newline at end of file