From 54f5801f41d504f1b340491ee928cf32582d563e Mon Sep 17 00:00:00 2001 From: pathywang Date: Sun, 4 Oct 2026 05:20:49 +0100 Subject: [PATCH 1/3] complete linked-list --- Sprint-2/implement_linked_list/linked_list.py | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index e69de29b..bb562246 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -0,0 +1,55 @@ +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): + node = self.tail + + if node is None: + return None + + if self.head == self.tail: + self.head = None + self.tail = None + else: + self.tail = node.previous + self.tail.next = None + + return node.value + + def remove(self, node): + if node == self.head and node == self.tail: + self.head = None + self.tail = None + + elif node == self.head: + self.head = node.next + self.head.previous = None + + elif node == self.tail: + self.tail = node.previous + self.tail.next = None + + else: + node.previous.next = node.next + node.next.previous = node.previous \ No newline at end of file From 6aabe2c7c4a9dc38399be5ad16d1e7260e20d62f Mon Sep 17 00:00:00 2001 From: pathywang Date: Fri, 9 Oct 2026 21:43:53 +0100 Subject: [PATCH 2/3] correction --- Sprint-2/implement_linked_list/linked_list.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index bb562246..61aae11e 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 @@ -28,12 +30,7 @@ def pop_tail(self): if node is None: return None - if self.head == self.tail: - self.head = None - self.tail = None - else: - self.tail = node.previous - self.tail.next = None + self.remove(node) return node.value @@ -52,4 +49,7 @@ def remove(self, node): else: node.previous.next = node.next - node.next.previous = node.previous \ No newline at end of file + node.next.previous = node.previous + + node.next = None + node.previous = None \ No newline at end of file From 64a9e425b70a0ecbe98b5f8ff797812ef859e3fd Mon Sep 17 00:00:00 2001 From: pathywang Date: Fri, 9 Oct 2026 22:27:47 +0100 Subject: [PATCH 3/3] correction --- Sprint-2/implement_linked_list/linked_list.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sprint-2/implement_linked_list/linked_list.py b/Sprint-2/implement_linked_list/linked_list.py index 61aae11e..5999a955 100644 --- a/Sprint-2/implement_linked_list/linked_list.py +++ b/Sprint-2/implement_linked_list/linked_list.py @@ -1,5 +1,5 @@ class Node: - __slots__ = ("value", "next", "previous") + __slots__ = ("value", "next", "previous") def __init__(self, value): self.value = value