Example #1
0
    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])))
Example #2
0
    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))
Example #7
0
    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([])))
Example #8
0
    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])))
Example #9
0
    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])))
Example #10
0
    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))
Example #11
0
    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([])))
Example #12
0
    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))
Example #13
0
    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])))
Example #14
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)
Example #15
0
    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])))
Example #16
0
    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])))
Example #19
0
    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))