根源简述
这道题是腾讯在2024/8/30考的一道面试题,整体来说,难度不大,就是代码量稍稍有点儿大,让我们一起来看一下吧
题目描述
整数无序双向链表能否转BST(二叉搜索树),如果能,怎么转 (尽可能少的时间复杂度和空间复杂度),如果不能为什么?
解题思路
这道题想都不用想,一定是能转的,要不然考你干啥,接下来就看怎么转
我们可以把这个题拆成两个部分
1.整数无序双向链表进行排序
2.利用BST的性质(中序遍历有序),将排好序的双向链表再转为BST
这么一拆,就清晰的多了,就能逐个击破,下面来让我们看一下代码是怎么实现的
代码实现
class ListNode {
int val;
ListNode prev;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
}
}
public class DoublyLinkedListToBST {
// 将双向链表进行排序
public ListNode sortDoublyLinkedList(ListNode head) {
// 如果链表为空或只有一个节点,直接返回
if (head ==