Finished implementing a first version of delete_item

This commit is contained in:
julien lengrand-lambert
2013-12-08 14:39:30 +01:00
parent c64ae01a36
commit 6b750028f9
2 changed files with 23 additions and 3 deletions

View File

@@ -56,10 +56,23 @@ class SingleLinkedList():
item = self._root.nexti item = self._root.nexti
self._root = item self._root = item
self._size -= 1 self._size -= 1
elif node >= self.size(): elif node >= self._size:
raise Exception("Requested value out of list bounds") raise Exception("Requested value out of list bounds")
else:
# Find the element before
# Find the element after
# Link the element after to the element before
# Reduce the size
# I want to traverse the list only once
item = self._root
for i in range(node - 1):
item = item.nexti
item_bef = item
item_af = item.nexti.nexti
item_bef.nexti = item_af
self._size -= 1
def __len__(self): def __len__(self):

View File

@@ -56,11 +56,18 @@ class test_single_linked_list(unittest.TestCase):
self.assertEqual(2, len(sl)) self.assertEqual(2, len(sl))
self.assertEqual(2, sl._root.value) self.assertEqual(2, sl._root.value)
sl.add(4) sl.add(4)
sl.add(5) sl.add(5)
sl.add(6) sl.add(6)
print sl
sl.delete_item(len(sl) - 1)
self.assertEqual("2, 3, 4, 5", sl.__str__())
sl.delete_item(1)
self.assertEqual("2, 4, 5", sl.__str__())
sl.delete_item()
self.assertEqual("4, 5", sl.__str__())
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()