Delete 1-linked-list/linked_list.py

This commit is contained in:
William Mantly 2023-09-26 04:59:50 +00:00
parent 049df3c8c2
commit 0421d87598

View File

@ -1,142 +0,0 @@
class Node:
def __init__(self, payLoad, next=None):
self.payLoad = payLoad
self.next = next
def __str__(self):
return str(self.payLoad)
def __repr__(self):
return self.__str__()
class LinkedList:
def __init__(self, item):
self.next = self.next = self.__check_Node(item)
self.head = self.next
def __repr__(self):
return self.__str__()
def __add__(self, item):
'''allow += and + operates to work correctly'''
if item is self: return False
self.push( item )
return self
def __iter__(self):
'''allow the in operator to work'''
current = self.next
while isinstance(current, Node):
yield current
current = current.next
def __len__(self):
'''allow the len() function to be used'''
return self.find( None )['count']
def __str__(self):
'''allow print to work correctly'''
current = self.next
out = 'Head' + ' => '
for current in self:
# while current:
out += str(current.payLoad) + ' => '
current = current.next
return out + 'None'
def __check_Node(self, node):
'''internal method check if node is a node object'''
if isinstance(node, self.__class__):
return node.head
if not isinstance(node, Node):
return Node(node)
return node
def find(self, match):
''' Searches the list for a matching node. If found it will return the
current node, last node as Node objects and position as an int.
If nothing is found, it will return None, the last node as a Node
object, and the full length of the list as an int.
This function will **ONLY** return the first match.
setting match to None will find the end of the list and return the
last node as return['last']
This method does alot of the heavy lifting.
'''
current = self.next
last = None
count = 0
while current:
if current.payLoad == match:
return {'current': current, 'last': last, 'count': count}
last = current
current = current.next
count += 1
return {'current': current, 'last': last, 'count': count}
def insert(self, *items, after=False):
# figures out the position of the node
previous_node = self.find(after)['current'] if after != False else self
for item in items[:: -1]:
if isinstance(item, self.__class__):
item = item.next
item = self.__check_Node( item )
item.next = previous_node.next
previous_node.next = item
return self
def push(self, item):
last_node = self.find(None)['last']
node = self.__check_Node(item)
last_node.next = node;
def print_right(self):
def rec(current):
if not current: return 'None'
return rec( current.next ) + ' <= ' + current.payLoad
return rec( self.next ) + ' <= Head'
def delete(self, payLoad):
match = self.find( payLoad )
if match['current']:
match['last'].next = match['current'].next
return match['current'];
return None
if __name__ == '__main__':
''' Some testing stuff '''
l1 = LinkedList('b')
l1.insert('a')
l1.push('c')
print(l1)
l2 = LinkedList('1')
l2.push('2')
print(l2)
l1 +=l2
print(l1)