From a3e6c17017bef78530ff9c4fedd2329829bdb511 Mon Sep 17 00:00:00 2001 From: nadika Date: Fri, 13 Jun 2025 12:46:41 +0100 Subject: [PATCH 1/4] Add ListNode class and LinkedList --- Sprint-2/implement_linked_list/linked_list.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index e69de29..854283a 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -0,0 +1,10 @@ +class ListNode: + def __init__(self, value): + self.value = value + self.previous = None + self.next = None + +class LinkedList: + def __init__(self): + self.head = None + self.tail = None From 3ade6ee8a8230f6a92a61642b96f7e4f0c7475f3 Mon Sep 17 00:00:00 2001 From: nadika Date: Fri, 13 Jun 2025 15:08:10 +0100 Subject: [PATCH 2/4] Implement push_head method --- Sprint-2/implement_linked_list/linked_list.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 854283a..24516b8 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -8,3 +8,17 @@ class LinkedList: def __init__(self): self.head = None self.tail = None + + def push_head(self, value): + new_node = ListNode(value) + new_node.next = self.head + + if self.head: + self.head.previous = new_node + + self.head = new_node + + if self.tail is None: + self.tail = new_node + + return new_node From a3c97524e05fce144d8f9eae03362226b8768194 Mon Sep 17 00:00:00 2001 From: nadika Date: Fri, 13 Jun 2025 15:12:27 +0100 Subject: [PATCH 3/4] Add pop_tail, remove methods --- Sprint-2/implement_linked_list/linked_list.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 24516b8..cc40be7 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -22,3 +22,32 @@ def push_head(self, value): self.tail = new_node return new_node + + def pop_tail(self): + if self.tail is None: + return None + + value = self.tail.value + + if self.tail.previous: + self.tail = self.tail.previous + self.tail.next = None + else: + self.head = None + self.tail = None + + return value + + def remove(self, node): + if node.previous: + node.previous.next = node.next + else: + self.head = node.next + + if node.next: + node.next.previous = node.previous + else: + self.tail = node.previous + + node.previous = None + node.next = None \ No newline at end of file From 6b398f5f379652572333a4b8ecc70995409fa398 Mon Sep 17 00:00:00 2001 From: nadika Date: Fri, 13 Jun 2025 15:19:22 +0100 Subject: [PATCH 4/4] Add comments --- Sprint-2/implement_linked_list/linked_list.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index cc40be7..9fcefaf 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -1,16 +1,18 @@ +# A single node in the list class ListNode: def __init__(self, value): self.value = value self.previous = None self.next = None - +# The linked list class class LinkedList: - def __init__(self): - self.head = None + def __init__(self): + self.head = None self.tail = None - def push_head(self, value): - new_node = ListNode(value) + # Add a value to the front of the list + def push_head(self, value): + new_node = ListNode(value) new_node.next = self.head if self.head: @@ -22,7 +24,8 @@ def push_head(self, value): self.tail = new_node return new_node - + + # Remove and return value from the end def pop_tail(self): if self.tail is None: return None @@ -37,7 +40,8 @@ def pop_tail(self): self.tail = None return value - + + # Remove a node from the list def remove(self, node): if node.previous: node.previous.next = node.next