From 5bd04a4886c7174f6287ad82d460ff61748217b8 Mon Sep 17 00:00:00 2001 From: eyuell21 Date: Tue, 14 Oct 2025 11:25:33 +0100 Subject: [PATCH 1/3] Linked list implementation. --- 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..8fceb0a 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.prev = None + self.next = None + +class LinkedList: + def __init__(self): + self.head = None + self.tail = None + + def push_head(self, value): + new_node = Node(value) + new_node.next = self.head + new_node.prev = None + + if self.head is not None: + self.head.prev = new_node + self.head = new_node + + if self.tail is None: + self.tail = new_node + + return new_node + + def pop_tail(self): + if self.tail is None: + return + node_to_be_removed = self.tail + self.tail = node_to_be_removed.prev + + if self.tail is not None: + self.tail.next = None + else: + self.head = None + + return node_to_be_removed.value + + def remove(self, node): + if node.prev is not None: + node.prev.next = node.next + else: + self.head = node.next + if node.next is not None: + node.next.prev = node.prev + if node == self.tail: + self.tail = node.prev + node.prev = None + node.next = None + + + + From 88ea962ce9b85229783a7060b139479bf798537f Mon Sep 17 00:00:00 2001 From: eyuell21 Date: Tue, 3 Mar 2026 14:21:04 +0000 Subject: [PATCH 2/3] Clear references of removed node in pop_tail method --- Sprint-2/implement_linked_list/linked_list.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 8fceb0a..382ff3d 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -34,6 +34,8 @@ def pop_tail(self): else: self.head = None + node_to_be_removed.prev = None + node_to_be_removed.next = None return node_to_be_removed.value def remove(self, node): From ffefdf1d9ce021c5cf40e24582497f951bfbe3d7 Mon Sep 17 00:00:00 2001 From: eyuell21 Date: Wed, 4 Mar 2026 15:09:21 +0000 Subject: [PATCH 3/3] Refactor pop_tail method to utilize remove for better code clarity --- Sprint-2/implement_linked_list/linked_list.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 382ff3d..6f03ca0 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -27,15 +27,7 @@ def pop_tail(self): if self.tail is None: return node_to_be_removed = self.tail - self.tail = node_to_be_removed.prev - - if self.tail is not None: - self.tail.next = None - else: - self.head = None - - node_to_be_removed.prev = None - node_to_be_removed.next = None + self.remove(node_to_be_removed) return node_to_be_removed.value def remove(self, node):