leetcode练习题 convert-sorted-list-to-binary-search-tree

解题思路

与升序数组情况的解法类似,只不过数组支持随机访问,而链表的话找寻中间结点要用到快慢指针,总体来说不难,但是若用while循环找寻中间结点进行断链的话系统判定发生段错误,可能超时了?看了讨论区普遍采用了标记链表尾结点的下一个结点,从而不需要断链,解决了问题。

代码

class Solution {
public:
    TreeNode *build(ListNode *head,ListNode *tail){
        if(head == tail)
            return NULL;
        ListNode *p = head;
        ListNode *q = head;
        while(q != tail && q->next != tail){
            p = p->next;
            q = q->next->next;
        }
        TreeNode *root = new TreeNode(p->val);
        root->left = build(head,p);
        root->right = build(p->next,tail);
        return root;
    }
    
    TreeNode *sortedListToBST(ListNode *head) {
        if(head == NULL)
            return NULL;
        return build(head,NULL);
    }
};

你可能感兴趣的:(leetcode练习,链表,算法,数据结构)