寻找中间位置作为根节点,把根节点前面部分最后一个节点的next置为NULL
class Solution {
public:
TreeNode * sortList(ListNode *node)
{
if(node == NULL)
return NULL;
int len = 0;
ListNode* p = node;
while(p)
{
len++;
p= p->next;
}
ListNode* pre = NULL;
ListNode* after = node->next;
p = node;
int i=0;
while(i!=len/2)
{
pre = p;
p=p->next;
i++;
}
TreeNode * head = new TreeNode(p->val);
after= p->next;
if(pre!=NULL)//bug1 pre有可能为NULL 对于一个节点情况
pre->next = NULL;
if(p!=node)//bug2 p==node 对于一个节点情况 则left为空
head -> left = sortList(node);
else
head->left = NULL;
head -> right = sortList(after);
return head;
}
TreeNode *sortedListToBST(ListNode *head) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(head == NULL)
return NULL;
TreeNode* root;
root = sortList(head);
}
};