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