public TreeNode sortedListToBST_lint(ListNode head) {
        if (head == null)
            return null;
        ListNode fast = head, slow = head, prev = null;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            prev = slow;
            slow = slow.next;
        }
        // TreeNode root = null;
        if (prev != null) {
            prev.next = null;
        } else {
            head = null;
        }
        TreeNode root = new TreeNode(slow.val);
        root.left = sortedListToBST_lint(head);
        root.right = sortedListToBST_lint(slow.next);
        return root;
    }