109.有序链表转换二叉搜索树

方法:找到链表的中点,将其作为根节点
/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public TreeNode sortedListToBST(ListNode head) {return buildTree(head,null);}public TreeNode buildTree(ListNode left,ListNode right){if(left == right){return null;}ListNode mid = getMid(left,right);TreeNode root = new TreeNode(mid.val);root.left = buildTree(left,mid);root.right = buildTree(mid.next,right);return root;}public ListNode getMid(ListNode left,ListNode right){ListNode fast = left;ListNode slow = left;while(fast.next != right && fast.next.next != right){fast = fast.next.next;slow = slow.next;}return slow;}//找到链表的中间节点作为根节点
}