Created
September 9, 2018 09:47
-
-
Save ryukinix/49bad03033f6a2e8fafb5c37148a6ad0 to your computer and use it in GitHub Desktop.
A LinkedList implementation using Object Orientation in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from dataclasses import dataclass | |
from typing import T | |
""" | |
A naive Linked List implementation using dataclass as node. | |
""" | |
@dataclass | |
class Node: | |
data: T | |
next: 'Node' | |
class LinkedList: | |
def __init__(self): | |
self.root = None | |
def __delitem__(self, v): | |
node = self.root | |
prev = None | |
if self.root is not None and self.root.data == v: | |
self.root = self.root.next | |
return | |
while node is not None: | |
if node.data == v: | |
if prev is not None: | |
prev.next = node.next | |
else: | |
node = node.next | |
prev = node | |
node = node.next | |
return self | |
def __iter__(self): | |
node = self.root | |
while node is not None: | |
yield node.data | |
node = node.next | |
def __len__(self): | |
node = self.root | |
counter = 0 | |
while node is not None: | |
counter += 1 | |
node = node.next | |
return counter | |
def add(self, v): | |
self.root = Node(v, self.root) | |
return self | |
def append(self, v): | |
node = self.root | |
if node is not None: | |
while node.next is not None: | |
node = node.next | |
node.next = Node(v, None) | |
else: | |
self.add(v) | |
return self | |
def clear(self): | |
self.root = None | |
def index(self, i): | |
node = self.root | |
while i > 0: | |
node = node.next | |
i -= 1 | |
return node.data | |
def __getitem__(self, k): | |
return self.index(k) | |
def __str__(self): | |
node = self.root | |
string = "[" | |
while node is not None: | |
string += repr(node.data) | |
if node.next is None: | |
break | |
else: | |
string += ", " | |
node = node.next | |
string += "]" | |
return string | |
__repr__ = __str__ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment