题目地址
和上题108类似,关键在于分割当前链表,记得将左子链表尾部置NULL。
class Solution {
public:
TreeNode *sortedListToBST(ListNode *head) {
if (!head) {
return NULL;
}
int size = 0;
ListNode *p = head;
while (p) {
size++;
p = p->next;
}
ListNode *pre = NULL;
p = head;
for (int i = 0; i < size / 2; ++i) {
pre = p;
p = p->next;
}
TreeNode *root = new TreeNode(p->val);
if (pre) {//有左孩子
pre->next = NULL;
root->left = sortedListToBST(head);
}
root->right = sortedListToBST(p->next);
return root;
}
};