Delete 1-linked-list/linked_list.py
This commit is contained in:
parent
049df3c8c2
commit
0421d87598
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user