Beispiel #1
0
class LinkedListTests(unittest.TestCase):
    def setUp(self):
        self.list = LinkedList()

    def test_add_to_tail(self):
        self.list.add_to_tail(1)
        self.assertEqual(self.list.tail.value, 1)
        self.assertEqual(self.list.head.value, 1)
        self.list.add_to_tail(2)
        self.assertEqual(self.list.tail.value, 2)
        self.assertEqual(self.list.head.value, 1)

    def test_contains(self):
        self.list.add_to_tail(1)
        self.list.add_to_tail(2)
        self.list.add_to_tail(5)
        self.list.add_to_tail(10)
        self.assertTrue(self.list.contains(10))
        self.assertTrue(self.list.contains(2))
        self.assertFalse(self.list.contains(1000))

    def test_remove_head(self):
        self.list.add_to_tail(10)
        self.list.add_to_tail(20)
        self.assertEqual(self.list.remove_head(), 10)
        self.assertFalse(self.list.contains(10))
        self.assertEqual(self.list.remove_head(), 20)
        self.assertFalse(self.list.contains(20))

        self.list.add_to_tail(10)    
        self.assertEqual(self.list.remove_head(), 10)    
        self.assertIsNone(self.list.head)
        self.assertIsNone(self.list.tail)
        self.assertIsNone(self.list.remove_head())
#         if name_1 == name_2:
#             duplicates.append(name_1)

#########
# Using comprehensions
# duplicates = [name for name in names_1 if name in names_2]

########
# Using Linked List

# create a new list
names_1_list = LinkedList()

# put names_1 in list
for name in names_1:
    names_1_list.add_to_head(name)

# Check to see if each item of list 2 is in list 1
for name in names_2:
    if names_1_list.contains(name):
        duplicates.append(name)

end_time = time.time()
print(f"{len(duplicates)} duplicates:\n\n{', '.join(duplicates)}\n\n")
print(f"runtime: {end_time - start_time} seconds")

# ---------- Stretch Goal -----------
# Python has built-in tools that allow for a very efficient approach to this problem
# What's the best time you can accomplish?  There are no restrictions on techniques or data
# structures, but you may not import any additional libraries that you did not write yourself.