Implements first version of duplicates removal. Prepares everything for another version that would not store any extra information

This commit is contained in:
julien lengrand-lambert
2013-12-08 20:26:27 +01:00
parent 57a852f3e8
commit df7bde48f3
2 changed files with 67 additions and 0 deletions

View File

@@ -118,6 +118,37 @@ class SingleLinkedList():
item = item.nexti
return item.value
def remove_duplicates(self):
"""
Removes all duplicate values from the list
"""
# get an array of elements
# look at items
# if item value is in array, remove item
# otherwise, add value to array
values = []
item = self._root
ptr = 0
while(item is not None):
val = item.value
if val in values:
self.delete_item(ptr)
ptr -= 1
else:
values.append(val)
item = item.nexti
ptr += 1
def remove_duplicates_light(self):
"""
Removes all duplicate values from the list
NOTE: This version does not store any extra data, but will take some extra
time to complete
"""
pass
def __len__(self):
# Returns the number of elements in the list
return self._size

View File

@@ -130,5 +130,41 @@ class test_single_linked_list(unittest.TestCase):
self.assertRaises(Exception, lambda x: sl.get(14))
def test_remove_duplicates(self):
sl = SingleLinkedList()
sl.add(2)
sl.add(1)
sl.add(3)
sl.add(2)
sl.add(3)
sl.add(1)
sl.add(2)
self.assertEqual(7, len(sl))
sl.remove_duplicates()
self.assertEqual(3, len(sl))
self.assertEqual("2, 1, 3", sl.__str__())
def test_remove_duplicates_light(self):
sl = SingleLinkedList()
sl.add(2)
sl.add(1)
sl.add(3)
sl.add(2)
sl.add(3)
sl.add(1)
sl.add(2)
self.assertEqual(7, len(sl))
sl.remove_duplicates()
self.assertEqual(3, len(sl))
self.assertEqual("2, 1, 3", sl.__str__())
if __name__ == "__main__":
unittest.main()