Ejemplo n.º 1
0
            node.next = ListNode(carry % 10)
            carry //= 10
            node = node.next
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next

        if carry:
            node.next = ListNode(carry)

        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()

        l1 = createListNode([5, 2, 4])
        l2 = createListNode([5, 7, 5, 9])
        sumList = sol.addTwoNumbers(l1, l2)
        printListNode(sumList)

        l1 = createListNode([5, 4, 3, 1])
        l2 = createListNode([5, 7, 5, 2])
        sumList = sol.addTwoNumbers(l1, l2)
        printListNode(sumList)
    except:
        pass
Ejemplo n.º 2
0
        # p1 points to (m-1)th node
        p1 = dummy
        for i in range(m - 1):
            p1 = p1.next

        # Reverse node from position m to n
        pre, curr = None, p1.next
        for i in range(n - m + 1):
            temp = curr.next
            curr.next = pre
            pre, curr = curr, temp

        # Let original mth node points to (n+1)th node
        p1.next.next = curr
        # Let original (m-1)th node points to nth node
        p1.next = pre
        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, printListNode, createListNode
        sol = Solution()
        head = createListNode([1, 2, 3, 4, 5])
        printListNode(sol.reverseBetween(head, 2, 4))  # 1 4 3 2 5
        head = createListNode([1, 2, 3, 4, 5])
        printListNode(sol.reverseBetween(head, 0, 3))
    except:
        pass
Ejemplo n.º 3
0
        """
        if not head:
            return None

        dummy = ListNode(0)
        dummy.next = head

        p1, p2 = dummy, head
        while p2 and p2.next:
            p1 = p1.next
            p2 = p2.next.next

        mid = p1.next
        p1.next = None
        root = TreeNode(mid.val)
        if head != mid:
            root.left = self.sortedListToBST(head)
            root.right = self.sortedListToBST(mid.next)
        return root


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode
        from utils.TreeNode import TreeNode, printTreeNode
        sol = Solution()
        head = createListNode([1, 2, 3, 4, 5, 6])
        printTreeNode(sol.sortedListToBST(head))
    except Exception as e:
        print(e)
Ejemplo n.º 4
0
        :rtype: ListNode
        """
        dummy = ListNode(0)
        curr = dummy
        while l1 and l2:
            if l1.val > l2.val:
                curr.next = l2
                l2, curr = l2.next, curr.next
            else:
                curr.next = l1
                l1, curr = l1.next, curr.next

        if l1:
            curr.next = l1
        elif l2:
            curr.next = l2

        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()

        l1 = createListNode([1, 3, 5, 7])
        l2 = createListNode([2, 4, 6, 8])
        printListNode(sol.mergeTwoLists(l1, l2))
    except:
        pass
Ejemplo n.º 5
0
    def partition(self, head, x):
        """
        :type head: ListNode
        :type x: int
        :rtype: ListNode
        """
        h1 = ListNode(0)
        h2 = ListNode(0)
        p1, p2 = h1, h2
        while head:
            if head.val < x:
                p1.next = head
                p1 = p1.next
            else:
                p2.next = head
                p2 = p2.next
            head = head.next
        p1.next = h2.next
        p2.next = None
        return h1.next

if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()
        head = createListNode([1, 4, 3, 2, 5, 2])
        printListNode(sol.partition(head, 3))
        printListNode(sol.partition(None, 3))
    except:
        pass
Ejemplo n.º 6
0
        curr = dummy
        while curr.next and curr.next.next:
            p1, p2 = curr.next, curr.next.next
            p1.next = p2.next
            p2.next = p1
            curr.next = p2
            curr = curr.next.next

        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()

        head = createListNode([1])
        printListNode(sol.swapPairs(head))

        head = createListNode([1, 2])
        printListNode(sol.swapPairs(head))

        head = createListNode([1, 2, 3, 4, 5, 6, 7])
        printListNode(sol.swapPairs(head))  # Odd case

        head = createListNode([1, 2, 3, 4, 5, 6])
        printListNode(sol.swapPairs(head))  # Even case

    except:
        pass
Ejemplo n.º 7
0
        head = head.next.next
        while head and head.next:
            p1.next = head
            p2.next = head.next
            head = head.next.next

            p1 = p1.next
            p2 = p2.next

        if head and not head.next:
            p1.next = head
            p2.next = None
            p1 = p1.next

        p1.next = evenHead

        return oddHead


if __name__ == "__main__":
    try:
        from utils.ListNode import createListNode, printListNode
        sol = Solution()
        root = createListNode([1, 2, 3, 4, 5, 6, 7, 8])
        printListNode(sol.oddEvenList(root))
        root = createListNode([1, 2, 3, 4, 5, 6, 7])
        printListNode(sol.oddEvenList(root))
    except Exception as e:
        print(e)
Ejemplo n.º 8
0
        # Rotate
        if p1 != dummy:
            dummy.next = p1.next
            p1.next = None
            p2.next = head

        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, printListNode, createListNode
        sol = Solution()
        arr = [1, 2, 3, 4, 5]
        head = createListNode(arr)
        printListNode(sol.rotateRight(head, 1))

        arr = [1]
        head = createListNode(arr)
        printListNode(sol.rotateRight(head, 1))

        arr = [1]
        head = createListNode(arr)
        printListNode(sol.rotateRight(head, 99))

        arr = [1, 2]
        head = createListNode(arr)
        printListNode(sol.rotateRight(head, 1))

        arr = [1, 2]
Ejemplo n.º 9
0
class Solution(object):
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head:
            return None

        node = head
        while node.next:
            if node.next.val == node.val:
                node.next = node.next.next
            else:
                node = node.next
        return head

if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()
        head = createListNode([1, 1, 2, 2, 3])
        printListNode(sol.deleteDuplicates(head))
        head = createListNode([1, 2, 3])
        printListNode(sol.deleteDuplicates(head))
        head = createListNode([1])
        printListNode(sol.deleteDuplicates(head))

    except:
        pass
Ejemplo n.º 10
0
                l2 = l2.next
            curr.next = ListNode(val)
            curr = curr.next
            size -= 1

        prev = dummy
        while prev:
            curr = prev.next
            while curr and curr.val == 9:
                curr = curr.next
            while prev != curr:
                if curr and curr.val > 9:
                    prev.val += 1
                    prev.next.val -= 10
                prev = prev.next

        if dummy.val:
            return dummy
        return dummy.next


if __name__ == "__main__":
    try:
        from utils.ListNode import ListNode, createListNode, printListNode
        sol = Solution()
        l1 = createListNode([7, 2, 4, 3])
        l2 = createListNode([5, 6, 4])
        printListNode(sol.addTwoNumbers(l1, l2))
    except Exception as e:
        print(e)
Ejemplo n.º 11
0
        # Reverse second-half of linked list
        prev, curr = None, slow
        while curr:
            temp = curr.next
            curr.next = prev
            curr, prev = temp, curr

        # Compare and check palindrome
        p1, p2 = head, prev
        while p2:
            if p1.val != p2.val:
                return False
            p1 = p1.next
            p2 = p2.next
        return True


if __name__ == "__main__":
    try:
        from utils.ListNode import createListNode, printListNode
        sol = Solution()
        arr = createListNode([1, 2, 2, 1])
        print(sol.isPalindrome(arr) is True)
        arr = createListNode([1, 2, 3, 2, 1])
        print(sol.isPalindrome(arr) is True)
        arr = createListNode([1, 2, 3, 4, 2, 1])
        print(sol.isPalindrome(arr) is False)
    except Exception as e:
        print(e)