From 862c4098cb908b75396ada339071774c4f695ec7 Mon Sep 17 00:00:00 2001 From: larissalages Date: Wed, 14 Apr 2021 22:01:44 -0300 Subject: [PATCH] Q2.3 Delete middle node --- .../chapter2/Q2.3_delete_middle_node.py | 24 +++++++++++++++++++ cracking_the_code/chapter2/linked_list.py | 19 ++++++++------- 2 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 cracking_the_code/chapter2/Q2.3_delete_middle_node.py diff --git a/cracking_the_code/chapter2/Q2.3_delete_middle_node.py b/cracking_the_code/chapter2/Q2.3_delete_middle_node.py new file mode 100644 index 0000000..99a91bc --- /dev/null +++ b/cracking_the_code/chapter2/Q2.3_delete_middle_node.py @@ -0,0 +1,24 @@ +import logging +from linked_list import * + + +# We can simply copy the value of next node to the current node and delete next node +def delete_middle_node(node): + if not node: + return + node.value = node.next.value + node.next = node.next.next + + +def main(): + # build a list + lst = LinkedList(['a', 'b', 'c', 'd', 'e', 'f']) + p = lst.head() + while p.value != 'c': + p = p.next + delete_middle_node(p) + lst.print() + + +if __name__ == '__main__': + main() diff --git a/cracking_the_code/chapter2/linked_list.py b/cracking_the_code/chapter2/linked_list.py index 7602f4c..33c78b0 100644 --- a/cracking_the_code/chapter2/linked_list.py +++ b/cracking_the_code/chapter2/linked_list.py @@ -8,7 +8,7 @@ def __init__(self, v): class LinkedList: - head = None + _head = None def __init__(self, lst=None): if isinstance(lst, list): @@ -20,8 +20,8 @@ def __eq__(self, other): return False if self.length() != other.length(): return False - n = self.head - m = other.head + n = self._head + m = other._head while n: if n.value != m.value: return False @@ -30,7 +30,7 @@ def __eq__(self, other): return True def length(self): - n = self.head + n = self._head count = 0 while n: count += 1 @@ -38,10 +38,10 @@ def length(self): def add(self, v): new = Node(v) - if not self.head: - self.head = new + if not self._head: + self._head = new return - p = self.head + p = self._head while p.next: p = p.next p.next = new @@ -51,7 +51,7 @@ def list_to_linkedlist(self, lst): self.add(item) def print(self): - p = self.head + p = self._head str_lst = '' if not p: print('[]') @@ -59,3 +59,6 @@ def print(self): str_lst += '{}->'.format(p.value) p = p.next print(str_lst) + + def head(self): + return self._head \ No newline at end of file