diff --git a/linked_lists/LinkedListFIFO.py b/linked_lists/LinkedListFIFO.py new file mode 100644 index 0000000..f9d2c3c --- /dev/null +++ b/linked_lists/LinkedListFIFO.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + +class Node(): + """Implementation of a Node for a binary tree""" + + def __init__(self, value=None): + self.value = value + self.left = None + self.right = None + + def __repr__(self): + """Prints the node""" + return f'{self.value}' + + +class LinkedListFIFO: + '''A Linked-List class with a first-in-first-out logic''' + + def __init__(self): + self.head = None + self.tail = None + self.length = 0 + + def add_first(self, value): + self.length = 1 + node = Node(value) + self.head = node + self.tail = node + + def delete_first(self): + self.length = 0 + self.head = None + self.tail = None + + def add(self, value): + self.length += 1 + node = Node(value) + if self.tail: + self.tail.right = node + self.tail = node + + def _delete(self, node): + if not self.head or not self.head.pointer: + self.delete_first() + else: + node, prev, i = self._find(index) + if i == index and node: + self.length -= 1 + if i == 0 or not prev: + self.head = node.pointer + else: + prev.pointer = node.pointer + if not self.tail == node: + self.tail = prev + + def find(self, index): + prev = None + node = self.head + i = 0 + while node and i < index: + prev = node + node = node.right + i += 1 + return node, prev, i + + +if __name__ == '__main__': + + print('Linked List FIFO') + ll = LinkedListFIFO() + print(f'Add 1: {ll.add(1)}') + print(f'Add 2: {ll.add(2)}') + print(f'Add 3: {ll.add(3)}') + + print(f'Length: {ll.length}') + print(f'Find 1: {ll.find(1)}') + + print(f'Delete 1: {ll._delete(1)}') + print(f'Length: {ll.length}') + print(f'Find 1: {ll.find(1)}') diff --git a/linked_lists/README.md b/linked_lists/README.md index e69de29..6d61fb2 100644 --- a/linked_lists/README.md +++ b/linked_lists/README.md @@ -0,0 +1,23 @@ +## Linked List + +
+ +### `LinkedListFIFO.py` + +
+ +```python +python LinkedListFIFO.py + +Linked List FIFO +Add 1: None +Add 2: Nonew +Add 3: None +Length: 3 +Find 1: (None, None, 0) +Delete 1: None +Length: 0 +Find 1: (None, None, 0) +``` + +
diff --git a/trees_and_graphs/BinaryTree.py b/trees_and_graphs/BinaryTree.py index ce75eaf..4308d6c 100644 --- a/trees_and_graphs/BinaryTree.py +++ b/trees_and_graphs/BinaryTree.py @@ -20,7 +20,7 @@ class Node(object): self.right = new_node else: self.left = self.left.add(value) - return self # without this, it doesn't add! + return self def search(self, item): if self.value == item: