def test(self):
        self.assertTrue(ListNode.equal(
            deleteDuplicateFromSortedList(ListNode.build_from_array([1, 1])),
            ListNode.build_from_array([1])))

        self.assertTrue(ListNode.equal(
            deleteDuplicateFromSortedList(ListNode.build_from_array([1])),
            ListNode.build_from_array([1])))

        self.assertTrue(ListNode.equal(
                deleteDuplicateFromSortedList(ListNode.build_from_array([1, 1, 2, 3, 3, 3])),
            ListNode.build_from_array([1, 2, 3])))

        self.assertTrue(ListNode.equal(
            deleteDuplicateFromSortedList(ListNode.build_from_array([])),
            ListNode.build_from_array([])))
    def test(self):
        self.assertTrue(ListNode.equal(
            mergeTwoSortedList(ListNode.build_from_array([1]), ListNode.build_from_array([1])),
            ListNode.build_from_array([1, 1])
        ))

        self.assertTrue(ListNode.equal(
            mergeTwoSortedList(ListNode.build_from_array([]), ListNode.build_from_array([])),
            ListNode.build_from_array([])
        ))

        self.assertTrue(ListNode.equal(
            mergeTwoSortedList(ListNode.build_from_array([1, 3, 6]), ListNode.build_from_array([2, 4, 5])),
            ListNode.build_from_array([1, 2, 3, 4, 5, 6])
        ))

        self.assertTrue(ListNode.equal(
            mergeTwoSortedList(ListNode.build_from_array([1]), ListNode.build_from_array([2, 4, 5])),
            ListNode.build_from_array([1, 2, 4, 5])
        ))
    def test(self):
        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 0),
            ListNode.build_from_array([1, 2, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 1),
            ListNode.build_from_array([1, 2, 3])))

        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 2),
            ListNode.build_from_array([1, 2, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 3),
            ListNode.build_from_array([1, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 4),
            ListNode.build_from_array([2, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEnd(ListNode.build_from_array([1, 2, 3, 4]), 5),
            ListNode.build_from_array([1, 2, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 0),
            ListNode.build_from_array([1, 2, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 1),
            ListNode.build_from_array([1, 2, 3])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 2),
            ListNode.build_from_array([1, 2, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 3),
            ListNode.build_from_array([1, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 4),
            ListNode.build_from_array([2, 3, 4])))

        self.assertTrue(ListNode.equal(
            removeNthFromEndV2(ListNode.build_from_array([1, 2, 3, 4]), 5),
            ListNode.build_from_array([1, 2, 3, 4])))