Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
思路:jame bond 的思路,找mid的前一个点,然后两边分开找;这里只传递一个参数;注意middle的前后都要断开,否则会死循环;
/**
* 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) {
if(head == null) {
return null;
}
ListNode dummpy = new ListNode(-1);
dummpy.next = head;
ListNode slow = dummpy;
ListNode fast = dummpy;
// find james bond point;
while(fast != null && fast.next != null && fast.next.next != null) {
fast = fast.next.next;
slow = slow.next;
}
ListNode middle = slow.next;
slow.next = null;
TreeNode root = new TreeNode(middle.val);
root.left = sortedListToBST(dummpy.next);
root.right = sortedListToBST(middle.next);
return root;
}
}