def test_facebook(self): s = Solution() self.assertEqual( ListNode.generate([7, 0, 8]), s.addTwoNumbers(ListNode.generate([2, 4, 3]), ListNode.generate([5, 6, 4])))
def test_linked_list_cycle(self): def addCycle(node, num): if num == -1 and not node: return i = 0 cur_node = None while node.next: if i == num: cur_node = node i = i + 1 node = node.next node.next = cur_node s = Solution() # 重载了equal,因此有环时==有问题 node1 = ListNode.generate([3, 2, 0, -4]) addCycle(node1, 1) self.assertEqual(True, s.hasCycle(node1)) node2 = ListNode.generate([1, 2]) addCycle(node2, 0) self.assertEqual(True, s.hasCycle(node2)) node3 = ListNode.generate([1]) addCycle(node3, -1) self.assertEqual(False, s.hasCycle(node3))
def test_facebook(self): s = Solution() self.assertEqual( ListNode.generate([1, 1, 2, 3, 4, 4]), s.mergeTwoLists(ListNode.generate([1, 2, 4]), ListNode.generate([1, 3, 4])))
def test_remove_duplicates_from_sorted_list_ii(self): s = Solution() self.assertEqual(ListNode.generate([]), s.deleteDuplicates(ListNode.generate([]))) self.assertEqual(ListNode.generate([1]), s.deleteDuplicates(ListNode.generate([1]))) self.assertEqual(ListNode.generate([]), s.deleteDuplicates(ListNode.generate([1, 1]))) self.assertEqual(ListNode.generate([1, 2, 5]), s.deleteDuplicates(ListNode.generate([1, 2, 3, 3, 4, 4, 5]))) self.assertEqual(ListNode.generate([2, 3]), s.deleteDuplicates(ListNode.generate([1, 1, 1, 2, 3])))
def test_remove_linked_list_elements(self): s = Solution() self.assertEqual(None, s.removeElements(ListNode.generate([]), 6)) self.assertEqual(None, s.removeElements(ListNode.generate([6, 6]), 6)) self.assertEqual(None, s.removeElements(ListNode.generate([6]), 6)) self.assertEqual(ListNode.generate([1, 2, 3, 4, 5]), s.removeElements(ListNode.generate([1, 2, 6, 3, 4, 5, 6]), 6))
def test_partition_list(self): s = Solution() # self.assertEqual(ListNode.generate([1, 2, 2, 4, 3, 5]), s.partition(ListNode.generate([1, 4, 3, 2, 5, 2]), 3)) # self.assertEqual(ListNode.generate([1, 4]), s.partition(ListNode.generate([4, 1]), 3)) # self.assertEqual(ListNode.generate([]), s.partition(ListNode.generate([]), 3)) # self.assertEqual(ListNode.generate([1, 2, 3]), s.partition(ListNode.generate([2, 1, 3]), 2)) # self.assertEqual(ListNode.generate([1]), s.partition(ListNode.generate([1]), 2)) # self.assertEqual(ListNode.generate([1]), s.partition(ListNode.generate([1]), 0)) self.assertEqual(ListNode.generate([1, 2, 3]), s.partition(ListNode.generate([3, 1, 2]), 3))
def test_linked_list_cycle_ii(self): s = Solution() list1 = ListNode.generate([1, 2, 3, 4, 5, 6]) cycle_start = list1.find_by_value(3) list1.find_by_value(6).next = cycle_start self.assertTrue(cycle_start is s.detectCycle(list1)) self.assertEqual(None, s.detectCycle(ListNode.generate([1, 2, 3, 4, 5, 6]))) self.assertEqual(None, s.detectCycle(ListNode.generate([1]))) self.assertEqual(None, s.detectCycle(ListNode.generate([])))
def test_reverse_linked_list(self): s = Solution() self.assertEqual(ListNode.generate([]), s.reverseList(ListNode.generate([]))) self.assertEqual(ListNode.generate([5]), s.reverseList(ListNode.generate([5]))) self.assertEqual(ListNode.generate([5, 1]), s.reverseList(ListNode.generate([1, 5]))) self.assertEqual(ListNode.generate([3, 2, 1]), s.reverseList(ListNode.generate([1, 2, 3]))) self.assertEqual(ListNode.generate([5, 4, 3, 2, 1]), s.reverseList(ListNode.generate([1, 2, 3, 4, 5])))
def test_palindrome_linked_list(self): s = Solution1() # self.assertEqual(True, s.isPalindrome(ListNode.generate([]))) # self.assertEqual(True, s.isPalindrome(ListNode.generate([1]))) # self.assertEqual(False, s.isPalindrome(ListNode.generate([1, 2]))) self.assertEqual(True, s.isPalindrome(ListNode.generate([1, 2, 2, 1])))
def test_remove_nth_from_end(self): s = Solution() self.assertEqual( ListNode.generate([2, 3, 4, 5]), s.removeNthFromEnd(ListNode.generate([1, 2, 3, 4, 5]), 5)) self.assertEqual( ListNode.generate([1, 2, 3, 5]), s.removeNthFromEnd(ListNode.generate([1, 2, 3, 4, 5]), 2)) self.assertEqual( ListNode.generate([1, 2, 3, 4]), s.removeNthFromEnd(ListNode.generate([1, 2, 3, 4, 5]), 1)) self.assertEqual(ListNode.generate([]), s.removeNthFromEnd(ListNode.generate([1]), 1))
def test_amazon(self): s = Solution() self.assertEqual(ListNode.generate([5, 4, 3, 2, 1]), s.reverseList(ListNode.generate([1, 2, 3, 4, 5]))) self.assertEqual(ListNode.generate([1]), s.reverseList(ListNode.generate([1]))) self.assertEqual(ListNode.generate([]), s.reverseList(ListNode.generate([])))
def test_rotate_list(self): s = Solution() self.assertEqual(ListNode.generate([4, 5, 1, 2, 3]), s.rotateRight(ListNode.generate([1, 2, 3, 4, 5]), 2)) self.assertEqual(ListNode.generate([1, 2, 3, 4, 5]), s.rotateRight(ListNode.generate([1, 2, 3, 4, 5]), 0)) self.assertEqual(ListNode.generate([2, 0, 1]), s.rotateRight(ListNode.generate([0, 1, 2]), 4)) self.assertEqual(None, s.rotateRight(None, 4))
def test_add_two_numbers_ii(self): s = Solution() self.assertEqual( ListNode.generate([7, 8, 0, 7]), s.addTwoNumbers(ListNode.generate([7, 2, 4, 3]), ListNode.generate([5, 6, 4]))) self.assertEqual( ListNode.generate([0]), s.addTwoNumbers(ListNode.generate([0]), ListNode.generate([0])))
def test_delete_node_in_a_linked_list(self): s = Solution() head1 = ListNode.generate([4, 5, 1, 9]) s.deleteNode(head1.find_by_val(5)) self.assertEqual(ListNode.generate([4, 1, 9]), head1) head2 = ListNode.generate([4, 5, 1, 9]) s.deleteNode(head2.find_by_val(4)) self.assertEqual(ListNode.generate([5, 1, 9]), head2) head3 = ListNode.generate([4, 5, 1, 9]) s.deleteNode(head3.find_by_val(1)) self.assertEqual(ListNode.generate([4, 5, 9]), head3)
def test_swap_nodes_in_pairs(self): s = Solution() self.assertEqual(ListNode.generate([]), s.swapPairs(ListNode.generate([]))) self.assertEqual(ListNode.generate([1]), s.swapPairs(ListNode.generate([1]))) self.assertEqual(ListNode.generate([2, 1]), s.swapPairs(ListNode.generate([1, 2]))) self.assertEqual(ListNode.generate([2, 1, 3]), s.swapPairs(ListNode.generate([1, 2, 3]))) self.assertEqual(ListNode.generate([2, 1, 4, 3]), s.swapPairs(ListNode.generate([1, 2, 3, 4]))) self.assertEqual(ListNode.generate([2, 1, 4, 3, 5]), s.swapPairs(ListNode.generate([1, 2, 3, 4, 5])))
def test_reverse_nodes_in_k_group(self): s = Solution() self.assertEqual(ListNode.generate([]), s.reverseKGroup(ListNode.generate([]), 2)) self.assertEqual(ListNode.generate([1]), s.reverseKGroup(ListNode.generate([1]), 2)) self.assertEqual(ListNode.generate([1, 2]), s.reverseKGroup(ListNode.generate([1, 2]), 3)) self.assertEqual( ListNode.generate([1, 2, 3, 4, 5]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4, 5]), 1)) self.assertEqual( ListNode.generate([2, 1, 4, 3, 5]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4, 5]), 2)) self.assertEqual( ListNode.generate([3, 2, 1, 4, 5]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4, 5]), 3)) self.assertEqual( ListNode.generate([3, 2, 1, 6, 5, 4]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4, 5, 6]), 3)) self.assertEqual(ListNode.generate([3, 2, 1, 4]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4]), 3))
def test_merge_k_sorted_lists(self): s = Solution() self.assertEqual( ListNode.generate([1, 1, 2, 3, 4, 4, 5, 6]), s.mergeKLists([ ListNode.generate([1, 4, 5]), ListNode.generate([1, 3, 4]), ListNode.generate([2, 6]) ])) self.assertEqual( ListNode.generate([1, 1, 3, 4, 4, 5]), s.mergeKLists([ ListNode.generate([1, 4, 5]), ListNode.generate([1, 3, 4]), ListNode.generate([]) ])) self.assertEqual( ListNode.generate([]), s.mergeKLists([ ListNode.generate([]), ListNode.generate([]), ListNode.generate([]) ])) self.assertEqual( ListNode.generate([2]), s.mergeKLists([ ListNode.generate([]), ListNode.generate([2]), ListNode.generate([]) ])) self.assertEqual( ListNode.generate([1, 2, 4, 5]), s.mergeKLists([ ListNode.generate([5]), ListNode.generate([1, 2, 4]), ListNode.generate([]) ]))
def test_microsoft(self): s = Solution() self.assertEqual(ListNode.generate([2, 1, 4, 3]), s.swapPairs(ListNode.generate([1, 2, 3, 4])))
def test_addTwoNumbers(self): s = Solution() # self.assertEqual(ListNode.generate([7, 0, 8]), ListNode.generate([7, 0, 8])) # self.assertEqual(ListNode.generate([7, 0, 8]), # s.addTwoNumbers(ListNode.generate([2, 4, 3]), ListNode.generate([5, 6, 4]))) self.assertEqual( ListNode.generate([7, 0, 2, 1]), s.addTwoNumbers(ListNode.generate([2, 4, 3]), ListNode.generate([5, 6, 8]))) self.assertEqual( ListNode.generate([7, 0, 8, 1]), s.addTwoNumbers(ListNode.generate([2, 4, 3, 1]), ListNode.generate([5, 6, 4]))) self.assertEqual( ListNode.generate([7, 0, 0, 0, 0, 1]), s.addTwoNumbers(ListNode.generate([2, 4, 3]), ListNode.generate([5, 6, 6, 9, 9]))) self.assertEqual(None, s.addTwoNumbers(None, None)) self.assertEqual( ListNode.generate([1, 2, 3]), s.addTwoNumbers(ListNode.generate([1, 2, 3]), ListNode.generate([0]))) self.assertEqual(ListNode.generate([1, 2, 3]), s.addTwoNumbers(ListNode.generate([1, 2, 3]), None))
def test_merge_two_sorted_lists(self): s = Solution() self.assertEqual( ListNode.generate([1, 1, 2, 3, 4, 4]), s.mergeTwoLists(ListNode.generate([1, 2, 4]), ListNode.generate([1, 3, 4]))) self.assertEqual( ListNode.generate([1, 3, 4]), s.mergeTwoLists(ListNode.generate([]), ListNode.generate([1, 3, 4]))) self.assertEqual( ListNode.generate([1, 2, 4]), s.mergeTwoLists(ListNode.generate([1, 2, 4]), ListNode.generate([]))) self.assertEqual( ListNode.generate([]), s.mergeTwoLists(ListNode.generate([]), ListNode.generate([]))) self.assertEqual( ListNode.generate([1, 2, 3, 4]), s.mergeTwoLists(ListNode.generate([1, 2]), ListNode.generate([3, 4]))) self.assertEqual( ListNode.generate([1, 2, 3, 4]), s.mergeTwoLists(ListNode.generate([3, 4]), ListNode.generate([1, 2])))
def test_microsoft(self): s = Solution() self.assertEqual( ListNode.generate([2, 1, 4, 3, 5]), s.reverseKGroup(ListNode.generate([1, 2, 3, 4, 5]), 2))