From df7bde48f3f0bbf65830830d41e45903d13ef3ae Mon Sep 17 00:00:00 2001 From: julien lengrand-lambert Date: Sun, 8 Dec 2013 20:26:27 +0100 Subject: [PATCH] Implements first version of duplicates removal. Prepares everything for another version that would not store any extra information --- 04_linkedList/ll.py | 31 +++++++++++++++++++++++++++++++ 04_linkedList/ll_test.py | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/04_linkedList/ll.py b/04_linkedList/ll.py index bb0c799..722a01a 100644 --- a/04_linkedList/ll.py +++ b/04_linkedList/ll.py @@ -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 diff --git a/04_linkedList/ll_test.py b/04_linkedList/ll_test.py index efae8a8..4eb4b0f 100644 --- a/04_linkedList/ll_test.py +++ b/04_linkedList/ll_test.py @@ -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()