Thursday, 20 March 2014
Week 7: Linked List
class LinkedList:
def __init__(self: 'LinkedList', head: object = None,
rest: 'LinkedList' = None) -> None:
'''
Attributes of LinkedList:
1. self.item
2. self.rest
3. self.empty
'''
self.empty = (head is None) and (rest is None)
if not self.empty:
self.item = head
if rest:
self.rest = rest
else:
self.rest = LinkedList()
def prepend(self: 'LinkedList', item: object) -> None:
''' Add new item to front of self'''
self.empty = False
self.rest = copy(self)
self.item = item
def decapitate(self: 'LinkedList') -> None:
''' Delete item off from front of self'''
if self.empty: # 0 items in LinkedList => no head, no rest
raise Exception("Can't decapitate empty list!")
elif self.rest.empty: # 1 item in LinkedList => yes head, no rest
self.empty = True
del(self.item)
del(self.rest)
else: # more than 2 items in LinkedList
self.item = self.rest.item
self.rest = self.rest.rest
def _contains_(self: 'LinkedList', value: object) -> bool:
''' Returns if value is in self
3 POSSIBILITIES:
1. self.empty -> value not in LinkedList -> return False
2. return if self.item == value
3. return if value is in self.rest
'''
return (not self.empty) and (self.item == value or value in self.rest)
def __get_item__(self: 'LinkedList', ind:int) -> object:
''' Returns item at index ind '''
if self.empty or ind < 0:
raise IndexError
elif ind > 0:
return self.rest.__get_item__(ind - 1)
else: # ind == 0
return self.item
def __repr__(self: 'LinkedList'):
if self.empty:
return 'LinkedList()'
else:
return ('LinkedList({}, {})'.format(repr(self.item), repr(self.rest)))
def __init__(self: 'LinkedList', head: object = None,
rest: 'LinkedList' = None) -> None:
'''
Attributes of LinkedList:
1. self.item
2. self.rest
3. self.empty
'''
self.empty = (head is None) and (rest is None)
if not self.empty:
self.item = head
if rest:
self.rest = rest
else:
self.rest = LinkedList()
def prepend(self: 'LinkedList', item: object) -> None:
''' Add new item to front of self'''
self.empty = False
self.rest = copy(self)
self.item = item
def decapitate(self: 'LinkedList') -> None:
''' Delete item off from front of self'''
if self.empty: # 0 items in LinkedList => no head, no rest
raise Exception("Can't decapitate empty list!")
elif self.rest.empty: # 1 item in LinkedList => yes head, no rest
self.empty = True
del(self.item)
del(self.rest)
else: # more than 2 items in LinkedList
self.item = self.rest.item
self.rest = self.rest.rest
def _contains_(self: 'LinkedList', value: object) -> bool:
''' Returns if value is in self
3 POSSIBILITIES:
1. self.empty -> value not in LinkedList -> return False
2. return if self.item == value
3. return if value is in self.rest
'''
return (not self.empty) and (self.item == value or value in self.rest)
def __get_item__(self: 'LinkedList', ind:int) -> object:
''' Returns item at index ind '''
if self.empty or ind < 0:
raise IndexError
elif ind > 0:
return self.rest.__get_item__(ind - 1)
else: # ind == 0
return self.item
def __repr__(self: 'LinkedList'):
if self.empty:
return 'LinkedList()'
else:
return ('LinkedList({}, {})'.format(repr(self.item), repr(self.rest)))
Subscribe to:
Posts (Atom)