class Solution {
public:
TreeNode* sortedListToBST(ListNode* head) {
if (!head) return nullptr;
if (!head->next) return new TreeNode(head->val);
// STEP01:要先找到中間
ListNode* prev = nullptr;
ListNode* slow = head;
ListNode* fast = head;
while(fast && fast->next){
prev = slow;
slow = slow->next;
fast = fast->next->next;
}
prev->next = nullptr; // 切掉左半段
// STEP02 建子點
ListNode* mid = slow;
TreeNode* root = new TreeNode(mid->val);
root->left = sortedListToBST(head);
root->right = sortedListToBST(mid->next);
return root;
}
};