mirror of
https://github.com/jlengrand/Coding4Interviews.git
synced 2026-03-10 08:11:24 +00:00
Implements first version of duplicates removal. Prepares everything for another version that would not store any extra information
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user