From 05fb26dafd0e391cfb9601e9cd547b3ddfaa4ef1 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Sat, 14 Feb 2026 21:46:39 +0000 Subject: [PATCH 1/2] implemented link list in python --- Sprint-2/implement_linked_list/linked_list.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index e69de29..42f9dfa 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -0,0 +1,60 @@ +class Node: + __slots__ = ("value", "previous", "next") + + def __init__(self, value): + self.value = value + self.previous = None + self.next = 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: + # empty list + self.head = self.tail = node + else: + node.next = self.head + self.head.previous = node + self.head = node + + return node #This is the handle + + def pop_tail(self): + if self.tail is None: + raise IndexError("Pop from empty list") + + node = self.tail + + if node.previous is None: + # One element + self.head = self.tail = None + else: + self.tail = node.previous + self.tail.next = None + + return node.value + + def remove(self, node): + if node.previous: + node.previous.next = node.next + + else: + # removing head + self.head = node.next + + if node.next: + node.next.previous = node.previous + else: + # removing the tail + self.tail = node.previous + + # Clean up references + + node.previous = None + node.next = None \ No newline at end of file From e7af8bd05c9dfea8b8b4ac5121f3956731f87630 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Fri, 27 Feb 2026 07:16:46 +0000 Subject: [PATCH 2/2] Removed some duplicate logic --- Sprint-2/implement_linked_list/linked_list.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 42f9dfa..7e88d46 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -30,20 +30,13 @@ def pop_tail(self): raise IndexError("Pop from empty list") node = self.tail - - if node.previous is None: - # One element - self.head = self.tail = None - else: - self.tail = node.previous - self.tail.next = None + self.remove(node) return node.value def remove(self, node): if node.previous: node.previous.next = node.next - else: # removing head self.head = node.next